次の問題に直面しています: 外部サービスから、異なるロケールを使用してフォーマットできるフォーマット済み数値データを取得しています:
1.234,00 (de_DE)
1,234.12 (en_US)
値をプリミティブ型に解析できるように、文字列をフォーマットするために使用されたロケールをプログラムで導出する最良の方法は何ですか?
次の問題に直面しています: 外部サービスから、異なるロケールを使用してフォーマットできるフォーマット済み数値データを取得しています:
1.234,00 (de_DE)
1,234.12 (en_US)
値をプリミティブ型に解析できるように、文字列をフォーマットするために使用されたロケールをプログラムで導出する最良の方法は何ですか?
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
完全に機能する環境のために、正規表現を改良する必要がある場合があります。