从格式化字符串派生区域设置

时间:2012-06-08 12:35:12

标签: java

我遇到以下问题:从外部服务我得到的格式化数字数据可以使用不同的语言环境进行格式化:

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

以编程方式派生已用于格式化String的Locale的最佳方法是什么,以便我可以将值解析为其原始类型?

1 个答案:

答案 0 :(得分:1)

避免抛出NumberFormatExceptions的一种可能性是使用正则表达式来检测语言环境。从你的例子:

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

您可能需要针对完全正常工作的环境优化正则表达式。