[英]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.