问题很简单,但我敢打赌,在这里提问可能比试图理解MessageFormat
的文档更直接
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
观察值为"12,345“。
期望值为"12345“。
发布于 2009-12-22 03:35:10
只需使用Long.toString(long foo)
即可
发布于 2009-12-22 03:38:52
MessageFormat.format("{0,number,#}", foo);
发布于 2020-05-07 22:44:25
在尝试使用国际化等“现实世界”模式时,我遇到了一点困难。具体地说,我们需要使用一种“选择”格式,其中输出取决于所显示的值,这就是java.text.ChoiceFormat
的用途。
下面是一个如何完成此操作的示例:
MessageFormat fmt = new MessageFormat("{0,choice,0#zero!|1#one!|1<{0,number,'#'}|10000<big: {0}}");
int[] nums = new int[] {
0,
1,
100,
1000,
10000,
100000,
1000000,
10000000
};
Object[] a = new Object[1];
for(int num : nums) {
a[0] = num;
System.out.println(fmt.format(a));
}
这将生成以下输出;我希望它对其他正在尝试完成相同类型的事情的人有帮助:
zero!
one!
100
1000
10000
big: 100,000
big: 1,000,000
big: 10,000,000
如您所见,"choice“格式允许我们根据传入的要格式化的值来选择要使用的格式类型。可以用文本替换较小的数字(不显示原始值)。显示中等大小的数字时不带分组分隔符(无逗号)。最大的数字也包括逗号。显然,这是一个完全人为设计的示例,用于演示java.text.MessageFormat
的灵活性。
关于文本格式中引用的#
的注意事项:由于同时使用了ChoiceFormat
和MessageFormat
,因此这两个元字符之间存在冲突。ChoiceFormat
使用#
作为元字符,这本质上意味着“相等”,因此格式化引擎知道,例如在1#one!
的情况下,我们正在比较{0}
和1
,如果它们相等,它将使用那个特定的“选项”。
但是#
对MessageFormat
还有另一个含义,那就是作为一个元字符,它对DecimalFormat
有意义:它是一个元字符,意思是“在这里放一个数字”。
因为它被包装在ChoiceFormat
字符串中,所以需要给#
加上引号。当ChoiceFormat
解析完字符串后,在将子格式传递给MessageFormat
(然后传递给DecimalFormat
)时,这些引号将被删除。
因此,当您使用{0,choice,...}
时,您必须引用这些#
字符,可能还包括其他字符。
https://stackoverflow.com/questions/1942118
复制相似问题