【问题标题】:How to get full unit name in jscience如何在 jscience 中获取完整的单位名称
【发布时间】:2015-06-23 01:19:51
【问题描述】:

我正在使用 jscience 为我解析一些单位:

    Unit<?> meter = Unit.valueOf("m");
    System.out.println(meter);

    Unit<?> foot = Unit.valueOf("ft");
    System.out.println(foot);

打印出来:

m
ft

我想打印出来

metre 
foot

或者类似的东西。实际上,我实际上是在阅读这些单位字符串,我无法控制用户输入的内容,所以我希望有些人输入“m”,有些人输入“metre”。显示回来时,我想始终将其显示为“米”。

[限制]

该程序是一个存储许多不同类型数量的大型数据存储程序。用户可以存储任意数量的任意维度(只要在 UCUM 中定义)。

【问题讨论】:

    标签: java units-of-measurement jscience


    【解决方案1】:

    您可以使用UnitFormat 类来指定如何打印这些类。使用label方法指定名称,使用alias方法辅助解析。

    import java.io.IOException;
    
    import javax.measure.unit.Unit;
    import javax.measure.unit.UnitFormat;
    
    public class ScienceUnit {
    
      public static void main(String[] args) throws IOException {
        Unit<?> meter = Unit.valueOf("m");
    
        StringBuilder sb = new StringBuilder();
        UnitFormat instance = UnitFormat.getInstance();
    
        instance.label(meter, "Metre");
        instance.format(meter, sb);
    
        System.out.println(sb.toString());
      }
    }
    

    输出:

    Metre
    

    请注意,如果您从该程序中删除 instance.label 行,则输出为:

    m
    

    默认值是您在原始帖子中描述的简短形式。我假设默认值是short form values described by UCUM,但我还没有真正检查过。

    【讨论】:

    • 非常感谢。我刚刚在反编译的 jar 中环顾四周,得出了同样的结论。我可以确认我认为这些标签没有在任何地方的库中定义是正确的吗? (如果他们不是很好,如果他们是的话,它只会节省我的时间)。
    • "我假设默认值是 UCUM 描述的短格式值,但我还没有实际检查过。"你应该检查一下。源代码似乎表明没有 UCUM 实现,并且占位符格式化程序是默认的 ASCII 格式,它提供与 UCUM 不同的值。此外,JSR-275 已被 JSR-363 取代(尽管大部分代码库重叠),并且显然已从 JSR-363 及其参考实现中取消了对 UCUM 的支持。我在任何地方都找不到 UCUM 支持。见stackoverflow.com/q/42653545/421049。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2017-12-05
    • 2019-10-07
    • 2011-10-09
    相关资源
    最近更新 更多