2016-06-13 22 views
2

我試圖檢查,如果用戶輸入一個有效格式的數字。但看起來,無效的String也被解析成功。舉例:Java - NumberFormat解析無效字符串成功

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)不會引發異常?

+0

看到這裏,太:http://stackoverflow.com/questions/30782905/numberformat-parse-not-strict-enough – GhostCat

回答

1

事實上,方法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); // ok, but it's not german format 
System.out.println(parsePosition.getIndex() == value2.length()); 

輸出:

true 
false 
+0

好主意。謝謝 – stebeg

4

從Java API兩者

公共抽象數解析(字符串源,一個ParsePosition 一個ParsePosition)

返回一個Long如果可能的(例如,該範圍內[Long.MIN_VALUE, Long.MAX_VALUE ]和沒有小數),否則一個雙。如果 IntegerOnly置位,將停止在小數點(或等效;例如, 爲有理數「1 2/3」,將在1之後停止)。不要把 排除在外;如果沒有對象可以被解析,索引是不變的!

這是一個預期的行爲,其結果將是128.598