[英]Java - NumberFormat parsing invalid String with success
我正在尝试检查用户是否输入了有效格式的数字。 但是看来,无效的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)不会引发异常?
取自Java API
公共抽象数字解析(字符串源,ParsePosition parsePosition)
如果可能,返回一个Long(例如,在[Long.MIN_VALUE,Long.MAX_VALUE]范围内,并且不带小数),否则返回Double。 如果设置了IntegerOnly,则将在小数点处停止(或等价;例如,对于有理数“ 1 2/3”,将在1之后停止)。 不抛出异常; 如果无法解析任何对象,则索引不变!
这是预期的行为,结果将是128.598
的确,在这种情况下, parse
方法不会引发任何异常,因此您应该提供一个ParsePosition
并检查此index
是否已设置为String
的末尾,指示整个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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.