web-dev-qa-db-ja.com

StringUtils.isNumericに代わるものはありますか?

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

17
Kevin Peterson

_org.Apache.commons.lang.math.NumberUtils_の isNumber(String) を試してください。

文字列が有効であるかどうかをチェックしますJava数値。

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

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

UPDATE-

isNumber(String)は非推奨になりました。代わりに isCreatable(String) を使用してください。

eav ご指摘ありがとうございます。

37
JHS

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です。文書で詳細情報を取得できます。

8
Cnfn

これは正確にはcommons.lang、しかしそれは動作します。

try {
    double d = Double.parseDouble(string);
    // string is a number
} catch (NumberFormatException e) {
    // string is not a number
}
4
Jeffrey

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

if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]"))を使用すると、0から9や以外のものが含まれていることがわかります。

これは同等のJavaScriptです(文字列を変更して実験します)...

http://jsfiddle.net/LzZE6/

1
Yevgeny Simkin