2016-06-13 10 views
2

ユーザーが有効な形式で数値を入力したかどうかを確認しようとしています。しかし、それは無効な文字列も成功と解析されるようです。例: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(値2)例外をスローしていないのですか?

+0

すぎて、ここを参照してください:http://stackoverflow.com/questions/30782905/numberformat-parse-not-strict-enough – GhostCat

答えて

1

確かにあなたがParsePositionを提供し、このindexが最後に設定されていることを確認する必要がありますので、この場合には例外をスローしませんparse方法になります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.MIN_VALUE、 はLong.MAX_VALUEを返します。 ]、小数点なし)、そうでなければDoubleです。 IntegerOnlyが設定されている場合、小数点で停止します(または、等価です(たとえば、有理数「1 2/3」の場合は 、1の後で停止する場合など)。 は例外をスローしません。オブジェクトを解析できない場合、インデックスは変更されません!

それは予想される動作ですが、結果は128.598

関連する問題