我面临以下问题:从外部服务中,我获得了可以使用不同语言环境进行格式化的数字数据:
1.234,00 (de_DE)
1,234.12 (en_US)
以编程方式派生用于格式化字符串的区域设置的最佳方法是什么,以便我可以将值解析为其基元类型?
避免抛出 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
您可能需要优化正则表达式以获得完全工作的环境。