2012-12-07 3 views
6

NumberFormat.formatと同じようにString.formatで数値をローカライズすることはできますか?java String.format:ローカライズされた数値

私は単に

String.format(locale, "%d", number) 

を使用することを期待しましたが、のNumberFormatを使用しているかのように、これは同じ結果を返しません。たとえば:

String.format(Locale.GERMAN, "%d", 1234567890) 

ができます: "1234567890"、

NumberFormat.getNumberInstance(Locale.GERMAN).format(1234567890) 

を与えながら: "1.234.567.890"

を含むテキストをローカライズするための方法をお勧めしているもの、できない場合は数字? documentationから

+2

は、なぜあなたは最初の番号にあなたの「文字列-番号」を解析しませんし、その後数フォーマッタでフォーマットしますか? – Chris

+0

私の "String-Number"は数字を含む文字列にすることができるので、数値に解析することはできません。 – wziska

答えて

9

、あなたがする必要があります:

  • ショーロケール固有のグループ化区切りに「」フラグが含まれる(あなたはあなたの例でやっているよう)

    • 供給ロケール

    だからあなたの例では、なる:

    String.format(Locale.GERMAN, "%,d", 1234567890) 
    

    'd'の前に追加の '、'フラグがあることに注意してください。

  • +0

    完璧!どのように私はドキュメントを読んでそれを逃したのか分からない。 – wziska

    2

    String.format()に代わるものは、MessageFormatを使用することです:

    MessageFormat format = new MessageFormat("The number is {0, number}", Locale.GERMAN); 
    String s = format.format(new Object[] {number}); 
    
    関連する問題