8

Java で変数が有効な整数かどうかをチェックするための 2 つのスタイルを見てきました。1 つは、実行してInteger.parseInt結果の例外をキャッチします。もう1つは、パターンを使用することです。次のうちどれがより良いアプローチですか?

String countStr;
int count;
try {
    count = Integer.parseInt(countStr);
} catch (Exception e) {
    //return as the variable is not a proper integer.
    return;
}

また

String integerRegex = "([0-9]{0,9})";
if (countStr.isEmpty() || !Pattern.matches(integerRegex, countStr)) {
    //return as the variable is not a proper integer.
    return;
}

ここでの私の質問は、Integer.parseInt()検証の標準的な方法を検証するための例外を実行してキャッチすることintですか? 私の正規表現が完璧ではないことは認めます。しかし、Java で int の検証に使用できる組み込みメソッドはありますか? 実際には、単に例外をキャッチするのではなく、何らかの検証を行った方がよいのではないでしょうか?

4

4 に答える 4

8

考えられるすべてのタイプのエラーを考慮し、すべてのケースを処理するため、上記のアプローチを使用することをお勧めします。たとえば、あなたが書いたものは負の数を正しく解析しません。

すべての整数の特定のサブセットを検証したい場合にのみ、独自の検証子を作成するのが理にかなっています。

一般的なアドバイス: よほどの理由がない限り、車輪を再発明しないでください。

于 2013-06-13T11:07:34.680 に答える
4

指定された文字列が数学的な意味で整数を表すだけでなく、32 ビット整数として表現できるかどうかを実際に確認したい場合は、2 番目のアプローチを使用しない十分な理由があります。

(注意を払っている人は 2**31) が完全に適切な整数であることは誰もが2147483648認めると思いますが、これは 2 つのオプションが異なる結果をもたらす無数の数の 1 つにすぎません。したがって、文字列を 32 ビット整数として表現できるかどうかを確認したい場合は、parseIntメソッドを使用します。それが整数かどうかを確認したい場合は、正規表現を使用します。

PS:それは例外をキャッチしないと言ったが、代わりに正しい NumberFormat 例外..

于 2013-06-13T11:40:42.500 に答える
3

これら 2 つの機能は、異なる目的を果たします。文字列に特定のパターンが含まれていることを確認したいだけの場合は、2 番目の方法を使用してください。変換する必要がある場合は、変換する必要がありますparseInt()。この場合、チェックして変換することは意味がありません。

ただし、番号に特定の要件がある場合は、最初に確認する必要がある場合がありparseInt()ます。これは、要件にまだ適合しないものを解析できる場合、常に例外がスローされるとは限らないためです。

于 2013-06-13T11:07:55.757 に答える