web-dev-qa-db-ja.com

javaの最もエレガントなisNumeric()ソリューション

現在、PHPコードの小さなスニペットをJavaに移植しており、関数is_numeric($x)に依存してかどうかを判断していました。 $xは数字かどうか。 Javaには同等の機能がないようで、これまでに見つけた現在のソリューションには満足していません。

私はここにある正規表現ソリューションに傾いています: http://rosettacode.org/wiki/Determine_if_a_string_is_numeric

どの方法を使用する必要があり、その理由は何ですか?

16
Doug

PHP isNumeric()関数は、16進表記と科学的記数法が数値であることを正しく判別しますが、リンク先の正規表現アプローチではそうではないことに注意してください。

特にApacheCommonsライブラリをすでに使用している場合の1つのオプションは、Commons-Langの NumberUtils.isNumber() を使用することです。 PHP関数が処理するのと同じケースを処理します。

16
Jacob Mattison

StringUtilsライブラリ の使用を検討しましたか?あなたが探しているものかもしれないisNumeric()関数があります。 (「」はtrueと評価されることに注意してください)

4
Fanny H.

通常、文字列に数値を含めることはお勧めできません。この数値を使用する場合は、それを解析して数値として使用します。数値として使用するかどうかにかかわらず、数値であるかどうかを「チェック」する必要はありません。

変換する必要がある場合は、Integer.parseInt(String)からBigDecimal(String)までのすべてのパーサーを使用できます。

コンテンツが数値として表示されることを確認する必要がある場合は、正規表現を使用する必要があります。

また、文字列にfloatを含めることができる場合は、parseIntを使用しないでください。

2
Colin Hebert

オプションで、正規表現を使用することもできます。

   if (theString.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")))
     return true;

    return false;
2
vicsz

Integer.parseInt()を試しましたか? (メソッド名はわかりませんが、Integerクラスには文字列からIntegerオブジェクトを作成するメソッドがあります)。または、整数以外の数値を処理する必要がある場合は、Doubleオブジェクトにも同様のメソッドを使用できます。これらが失敗した場合、例外がスローされます。

非常に大きな数(int/doubleよりも大きい)を解析する必要があり、正確な値が必要ない場合は、単純な正規表現ベースの方法で十分な場合があります。

1
Zoltán Ujhelyi

If((x instanceof Number)を使用するだけです

//解析可能な数もチェックする場合

|| (x instanceof String && x.matches( "((-|\+)?[0-9] +(\。[0-9] +)?)+"))

){...}
// --- BigDecimal拡張数値を含むすべての数値タイプ

0
user2044802

強く型付けされた言語では、一般的なisNumeric(String num)メソッドはあまり役に立ちません。 13214384348934918434441は数値ですが、ほとんどのタイプに適合しません。 isが適合しているものの多くは、同じ値を返しません。

Colinが指摘しているように、アプリケーションで文字列に数字を含めることはお勧めしません。 isNumberic関数は、インターフェイスメソッドの入力データにのみ適用できます。これらは、isNumericよりも正確な定義を持つ必要があります。他の人はさまざまな解決策を提供しています。正規表現を使用して、文字列の長さなど、多数の条件を一度にテストできます。

0
BillThor