簡體   English   中英

Java-NumberFormat成功解析無效的字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM