3

次の問題に直面しています: 外部サービスから、異なるロケールを使用してフォーマットできるフォーマット済み数値データを取得しています:

1.234,00 (de_DE)
1,234.12 (en_US)

値をプリミティブ型に解析できるように、文字列をフォーマットするために使用されたロケールをプログラムで導出する最良の方法は何ですか?

4

1 に答える 1

1

NumberFormatExceptions のスローを回避する 1 つの可能性は、正規表現を使用してロケールを検出することです。あなたの例から:

String sDE = "1.234,00"; // (de_DE)
String sEN = "1,234.12"; // (en_US)

Pattern patternEN = Pattern.compile("[0-9],[0-9].[0-9]");
Pattern patternDE = Pattern.compile("[0-9].[0-9],[0-9]");

System.out.println(" DE - EN : " + patternEN.matcher(sDE).find());
System.out.println(" EN - EN : " + patternEN.matcher(sEN).find());
System.out.println(" DE - DE : " + patternDE.matcher(sDE).find());
System.out.println(" EN - DE : " + patternDE.matcher(sEN).find());

次の結果が得られます。

 DE - EN : false
 EN - EN : true
 DE - DE : true
 EN - DE : false

完全に機能する環境のために、正規表現を改良する必要がある場合があります。

于 2012-06-08T12:54:39.890 に答える