16

私は現在、PHPコードの小さなスニペットをJavaに移植しています。関数に依存して、数値かis_numeric($x)どうかを判断していました。$xJava には同等の関数がないようで、これまでに見つけた現在の解決策には満足していません。

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

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

4

7 に答える 7

16

PHP の isNumeric() 関数は、16 進表記法と科学表記法が数値であると正しく判断しますが、リンク先の正規表現アプローチではそうではありません。

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

于 2010-08-17T21:45:42.360 に答える
4

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

于 2010-08-17T21:44:30.537 に答える
2

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

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

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

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

于 2010-08-17T21:41:11.143 に答える
2

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

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

    return false;
于 2010-08-17T21:57:49.683 に答える
1

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

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

于 2010-08-17T21:39:51.350 に答える
0

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

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

于 2010-08-17T22:17:22.907 に答える
0

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

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

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

){ ... }
//--- BigDecimal を含むすべての数値型は Number を拡張する

于 2013-11-23T06:30:08.087 に答える