168

Java for String クラスには、matches と呼ばれるメソッドがあります。このメソッドを使用して、正規表現を使用して文字列に数字のみが含まれているかどうかを確認する方法です。以下の例を試してみましたが、どちらも結果として false を返しました。

String regex = "[0-9]";
String data = "23343453";
System.out.println(data.matches(regex));

String regex = "^[0-9]";
String data = "23343453";
System.out.println(data.matches(regex));
4

9 に答える 9

388

試す

String regex = "[0-9]+";

また

String regex = "\\d+";

Javaの正規表現によると、 +は「1 回以上」を\d意味し、「数字」を意味します。

注:「二重のバックスラッシュ」は、単一のバックスラッシュを取得するためのエスケープ シーケンス\\dです。したがって、 Java 文字列では実際の結果が得られます。\d

参考文献:


編集:他の回答で混乱が生じたため、テストケースを作成しており、さらに詳細に説明します。

まず、この解決策 (または他の解決策) の正しさに疑問がある場合は、次のテスト ケースを実行してください。

String regex = "\\d+";

// positive test cases, should all be "true"
System.out.println("1".matches(regex));
System.out.println("12345".matches(regex));
System.out.println("123456789".matches(regex));

// negative test cases, should all be "false"
System.out.println("".matches(regex));
System.out.println("foo".matches(regex));
System.out.println("aa123bb".matches(regex));

質問1:

^正規表現にandを追加する必要はない$ので、「aa123bb」と一致しませんか?

いいえ。Java では、matches(質問で指定された) メソッドはフラグメントではなく完全な文字列に一致します。つまり、使用する必要はありません^\\d+$(正しいとしても)。最後のネガティブ テスト ケースを参照してください。

オンラインの「正規表現チェッカー」を使用すると、動作が異なる場合があることに注意してください。Java で文字列のフラグメントを一致させるには、代わりにメソッドを使用できますfind。詳細については、次を参照してください。

Java正規表現のmatches()とfind()の違い

質問2:

この正規表現は空の文字列にも一致しません""か?*

いいえ。正規表現\\d*は空の文字列に一致しますが、一致\\d+しません。星印*は 0 個以上を意味し、プラス+は 1 個以上を意味します。最初のネガティブ テスト ケースを参照してください。

質問 3

正規表現パターンをコンパイルする方が高速ではありませんか?

はい。を呼び出すたびに正規表現パターンをコンパイルするよりも、一度コンパイルする方が確かに高速ですmatches。そのため、パフォーマンスへの影響が重要な場合は、次のPatternようにコンパイルして使用できます。

Pattern pattern = Pattern.compile(regex);
System.out.println(pattern.matcher("1").matches());
System.out.println(pattern.matcher("12345").matches());
System.out.println(pattern.matcher("123456789").matches());
于 2013-02-27T11:53:19.143 に答える
35

Apache CommonsのNumberUtil.isNumber(String str)を使用することもできます

于 2013-02-27T11:53:50.023 に答える
11

まだ投稿されていないもう1つの解決策:

String regex = "\\p{Digit}+"; // uses POSIX character class
于 2013-02-27T12:05:59.240 に答える
7

+次のように、1桁(記号)以上を許可する必要があります。

String regex = "[0-9]+"; 
String data = "23343453"; 
System.out.println(data.matches(regex));
于 2013-02-27T11:53:37.467 に答える
7
Long.parseLong(data)

例外をキャッチし、マイナス記号を処理します。

桁数は限られていますが、これは実際に使用できるデータの変数を作成します。これは、最も一般的なユースケースだと思います。

于 2013-02-27T11:52:46.460 に答える