[解決済み] Javaで文字列が数字だけを含むかどうかを確認する方法
質問
Java の 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));
解決方法は?
試す
String regex = "[0-9]+";
または
String regex = "\\d+";
Javaに準ずる
正規表現
は、その
+
は「1回以上」という意味であり
\d
は「数字」を意味します。
注:"ダブルバックスラッシュ"は
エスケープシーケンス
を使うとシングルバックスラッシュになる - というわけです。
\\d
をjavaのStringに書くと、実際の結果が得られます。
\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:
を追加する必要はないのでしょうか?
^
と$
を正規表現に追加すると、 "aa123bb" にマッチしなくなります。
いいえ。
javaでは
matches
メソッド (質問で指定されたもの) は、断片ではなく完全な文字列にマッチします。言い換えれば、文字列の断片にマッチさせるために
^\\d+$
(これも正しいのですが)。最後の否定的なテストケースをご覧ください。
オンラインの正規表現チェッカを使用した場合、この動作は異なる可能性があることに注意してください。Javaで文字列の断片にマッチさせるために
find
メソッドに置き換えます。詳細はこちらで説明します。
Java Regexにおけるmatches()とfind()の違い
質問2:
この正規表現は空の文字列にもマッチしませんか。
""
?*
いいえ。
正規表現
\\d*
は空の文字列にマッチしますが
\\d+
はありません。スター
*
はゼロ以上を意味するのに対し、プラス
+
は1つ以上を意味します。最初の否定的なテストケースをご覧ください。
質問3
<ブロッククオート正規表現Patternをコンパイルした方が早いのでは?
はい、そうです。
を毎回実行するよりも、一度だけ正規表現パターンをコンパイルする方が確かに速いです。
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());
関連
-
プロジェクトの依存関係を解決できなかった 解決
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
Java Exceptionが発生しました エラー解決
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
SpringBootApplication を型解決できない。
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み】Java String - 文字列が数字だけで、文字が含まれていないかどうかを確認する
-
[解決済み】Java Regexのmatches()とfind()の違いについて