17

StringUtils.isNumeric は、"" に対して true を返し、7.8 に対して false を返します。もちろん、これは文書化された動作ですが、実際には私にとって最も便利ではありません。isActuallyNumeric を提供する他のもの (理想的には commons.lang 内) はありますか?

4

4 に答える 4

40

isNumber(String)からお試しくださいorg.apache.commons.lang.math.NumberUtils

文字列が有効なJava番号であるかどうかを確認します。

有効な数値には、0x修飾子でマークされた16進数、科学的記数法、および型修飾子(123Lなど)でマークされた数値が含まれます。

Null空の文字列はを返しfalseます。

アップデート -

isNumber(String)現在は非推奨です。isCreatable(String)代わりに使用してください。

それを指摘してくれてありがとうeav 。

于 2012-05-31T00:12:46.400 に答える
12

NumberUtils.isNumberは廃止されました。

あなたが使用する必要があります

NumberUtils.isCreatable

また

NumberUtils.isParsable

それらはすべて小数点値をサポートしています。

  • NumberUtils.isCreatableは、16 進数、8 進数、科学表記法、および型修飾子(123L など)でマークされた数値をサポートします。無効な 8 進値が返されますfalse(例: 09)。その値を取得したい場合は、NumberUtils.createNumberを使用する必要があります。
  • NumberUtils.isParsableのみがサポート0~9され、小数点 ( .)、その他の文字 (スペースなど) は を返しfalseます。

ちなみにStringUtils.isNumericの実装は commons-lang と commons-lang3 で若干の違いがあります。commons-lang では、StringUtils.isNumeric("")true. しかし、commons-lang3 では、StringUtils.isNumeric("")false. ドキュメントで詳細情報を取得できます。

于 2017-08-08T18:30:49.753 に答える
4

これは正確にはありませんがcommons.lang、動作します。

try {
    double d = Double.parseDouble(string);
    // string is a number
} catch (NumberFormatException e) {
    // string is not a number
}
于 2012-05-31T00:48:50.530 に答える
1

または、このような数字以外の文字と一致する文字があるかどうかを確認することもできます。

if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]"))次に、0〜9および/またはではないものがそこにあることがわかります。

これがjavascriptに相当するものです(実験するために文字列を変更してください)...

http://jsfiddle.net/LzZE6/

于 2012-05-31T00:14:16.680 に答える