簡単な質問ですが、ここで質問することはおそらく、次のドキュメントを理解しようとするよりも簡単ですMessageFormat
。
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
観測値は「12,345」です。
望ましい値は「12345」です。
簡単な質問ですが、ここで質問することはおそらく、次のドキュメントを理解しようとするよりも簡単ですMessageFormat
。
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
観測値は「12,345」です。
望ましい値は「12345」です。
回答:
MessageFormat.format("{0,number,#}", foo);
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
国際化などで「現実世界」のパターンを作成しようとすると、これに少し苦労しました。具体的には、出力が表示される値に依存する「選択」形式を使用する必要があり、それ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
ご覧のように、「選択」形式では、フォーマットするために渡される値に応じて、使用するフォーマットのタイプを選択できます。小さな数値はテキストで置き換えることができます(元の値は表示されません)。中規模の数値は、グループ化区切り文字なし(カンマなし)で表示されます。最大の数には、コンマも含まれます。明らかに、これはの柔軟性を示すために完全に考案された例ですjava.text.MessageFormat
。
引用さについての注意#
形式のテキストで:両方以来ChoiceFormat
とMessageFormat
使用されている、二つの間のメタ文字の間に衝突があります。本質的に「等しい」を意味するメタ文字としてChoiceFormat
使用#
するため、フォーマットエンジンは、たとえば1#one!
と比較{0}
し1
ている場合に、それらが等しい場合、その特定の「選択肢」を使用することを認識します。
しかし、に#
は別の意味がありMessageFormat
、それはに意味を持つメタキャラクターとしての意味ですDecimalFormat
。「ここに数字を置く」ことを意味するメタキャラクターです。
それはに包まれていますのでChoiceFormat
、文字列、#
ニーズが引用されます。ときにChoiceFormat
文字列を解析して行われているにサブフォーマットを渡すとき、これらの引用符は削除されますMessageFormat
(そして、その後に上DecimalFormat
)。
したがって、を使用する場合は{0,choice,...}
、それらの#
文字、および場合によっては他の文字を引用符で囲む必要があります。
最短の方法は
long foo = 12345;
String s = ""+foo;
new StringBuilder("").append(foo).toString()
ように拡張されるため、実際には最適ではありません。
""+
Long.toString()
とにかくこのソリューションがバックグラウンドで使用するものなので、代わりに使用する必要があります:)
String.valueOf(long)