2014年7月5日土曜日

MessageFormatで勝手にカンマが付く

javaのMessageFormatクラスで数値を表示したとき、3桁ごとに勝手にカンマが付きます。
        String msg = MessageFormat.format("{0}", 100000);
        System.out.println(msg);
実行結果
100,000
この結果はロケールにも依存してます。 デフォルトのLocaleをロシアにすると、スペースだけ入ります。 他にもカンマの代わりにピリオドを使う国もあるみたいです。
        Locale.setDefault(new Locale("ru"));
        String msg = MessageFormat.format("{0}", 100000);
        System.out.println(msg);
出力結果はこうなります。
100 000
Locale依存でもあるし、カンマを付けたくないときは次の2種類の方法でできるようです。

・数値をStringにする
ググるとまず出てきたのがこの方法です。

        String msg = MessageFormat.format("{0}", String.valueOf(100000));
        System.out.println(msg);
文字列を表示するので当然勝手にフォーマットされなません。
100000

・数値のフォーマット方法を指定する
APIドキュメント見ると、{0}のところに追加でフォーマットを指定できるようです。
 {ArgumentIndex , FormatType , FormatStyle }
FormatTypeにnumberを指定すると、FrotmatStyleにDecimalFormatと同じようにフォーマットを指定できるみたいです。
        String msg = MessageFormat.format("{0,number,#}", 100000);
        System.out.println(msg);
これでカンマが付加されなくなります。
100000
この方法はここを参照しました。
http://stackoverflow.com/questions/1942118/how-do-i-format-a-long-integer-as-a-string-without-separator-in-java

0 件のコメント:

コメントを投稿