可能重复:
安全地解析数字并且区域敏感
如何以区域设置敏感的方式验证包含十进制数的字符串?NumberFormat.parse允许过多,Double.parseDouble仅适用于英语语言环境.这是我尝试过的:
public static void main(String[] args) throws ParseException {
    Locale.setDefault(Locale.GERMAN);
    NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.getDefault());
    Number parsed = numberFormat.parse("4,5.6dfhf");
    System.out.println("parsed = " + parsed); // prints 4.5 instead of throwing ParseException
    double v = Double.parseDouble("3,3"); // throws NumberFormatException, although correct
}
关于
Number parsed = numberFormat.parse("4,5.6dfhf");
问题,您可以使用NumberFormat.parse(String source, ParsePosition pos)并检查它停止解析的位置是否确实是字符串的最后一个位置。
另外,在 4.5.6 问题上,您可以尝试通过setGroupingUsed(boolean newValue)关闭分组,因为我认为这是由 '.' 产生的问题。字符是区域设置上的分组字符。
应该是这样的
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.getDefault());
numberFormat.setGroupingUsed(false);
ParsePosition pos;
String nString = "4,5.6dfhf";
Number parsed = numberFormat.parse(nString, pos);
if (pos.getIndex() == nString.length()) // pos is set AFTER the last parsed position
   System.out.println("parsed = " + parsed);
else
   // Wrong