Java - NumberFormat解析无效的String并成功

时间:2016-06-13 12:20:38

标签: java

我正在尝试检查用户是否输入了有效格式的号码。但似乎无效的String也被成功解析。一个例子:

final String value1 = "12,85", value2 = "128,598.77";
NumberFormat format = NumberFormat.getInstance(Locale.GERMAN);
format.parse(value1); // ok
format.parse(value2); // ok, but it's not german format

为什么format.parse(value2)不会抛出异常?

2 个答案:

答案 0 :(得分:4)

取自java API

  

public abstract Number parse(String source,ParsePosition   一个ParsePosition)

     

如果可能,返回Long(例如,在[Long.MIN_VALUE,   Long.MAX_VALUE]并且没有小数),否则为Double。如果   设置IntegerOnly,将停在小数点(或等效点;例如,   对于有理数的数字" 1 2/3",将在1)之后停止。不扔   例外;如果没有对象可以解析,索引就不变了!

这是预期的行为,结果将是128.598

答案 1 :(得分:1)

确实,方法parse在这种情况下不会抛出任何异常,因此您应该提供ParsePosition并检查此index是否已设置为String的末尾{1}}表示已成功解析整个String,而不仅仅是开头。

ParsePosition parsePosition = new ParsePosition(0);
format.parse(value1, parsePosition); // ok
System.out.println(parsePosition.getIndex() == value1.length());
parsePosition = new ParsePosition(0);
format.parse(value2, parsePosition); // ok, but it's not german format
System.out.println(parsePosition.getIndex() == value2.length());

<强>输出:

true
false