String.matches()
で特定のパターンの文字列が含まれているかどうかを確認することができます。特定のパターンと正規表現(Regex)を意味します。
文字列に正規表現が一致するかどうかbooleanに戻します。これにより、文字列が私が探してパターンで構成されているかどうかがわかります。
複数のパターンを例に紹介しながら matches()
を適用する方法を説明します。
正規表現について詳しく知りたい方は正規表現(regex)、様々な例として簡単に理解するを参照してくださいお勧めします。
matches()基本的な例
matches()
は引数として正規表現を受け取ります。そして、文字列とパターンが一致するかどうか返します。
String.contains()
と大きな差がないように見え、次の例を見れば、違いがあります。
String str = "Welcome to codechacha";
System.out.print("Does String contains regex (.*)code(.*) ? : ");
System.out.println(str.matches("(.*)code(.*)"));
System.out.print("Does String contains regex code ? : ");
System.out.println(str.matches("code"));
System.out.print("Does String contains regex Welcome(.*) ? : " );
System.out.println(str.matches("Welcome(.*)"));
上記の例では、 (.*)
は0個以上のからなる任意の文字列を意味します。
そのため、正規表現 (.*)code(.*)
はcode両側に任意の文字列が来ても関係なく、codeが存在するかだけを確認します。
この正規表現は contains("code")
とほぼ同じであると考えてください。
一方、正規表現 code
は両側にいくつかの文字が来れば一致していないと判断します。そのため、falseが返されます。
Welcome(.*)
はWelcomeで開始し、その後ろに0個以上の文字が来るパターンがあるときにtrueを返します。
Output:
Does String contains regex (.*)code(.*) ? : true
Does String contains regex code ? : false
Does String contains regex Welcome(.*) ? : true
contains()とmatches()の違い
前述のように、 contains()
は、単に引数として渡された文字列が存在するかどうかを返します。
一方、 matches()
は正規表現を引数として受け取り、同じパターンの文字列であればtrueを返します。
正規表現は、探し文字の周りの文字も考慮するので、正規表現を詳しく知らなければ適用することは困難です。
System.out.print("Does String contains regex (.*)code(.*) ? : ");
System.out.println(str.matches("(.*)code(.*)"));
System.out.print("Does String contains regex code ? : ");
System.out.println(str.matches("code"));
True / trueの文字列パターンの検索
ユーザーからtrueという文字列を受け取ったときに、その文字列が実際にtrueかどうかを確認する必要があります。 もちろん、大文字と小文字を区別するためにif文を二度使用したり、containsを使用することができます。 しかし、この記事では、matchesに対して学ぶためmatchesを利用して実装してみました。
次のように matches()
で実装しました。
String str = "True";
System.out.println("Is it true ? : " + str.matches("[Tt]rue"));
str = "true";
System.out.println("Is it true ? : " + str.matches("[Tt]rue"));
str = "yes";
System.out.println("Is it true ? : " + str.matches("[Tt]rue"));
Output:
Is it true ? : true
Is it true ? : true
Is it true ? : false
正規表現 [Tt]
は、 "T"または "t"のどちらかの文字を意味します。
True、Yes、文字列パターンの検索
以下は、True / true、Yes / yes文字列を一緒に探し例です。
String str = "yes";
System.out.println("Is it true or yes ? : " + str.matches("[Tt]rue|[Yy]es"));
str = "true";
System.out.println("Is it true or yes ? : " + str.matches("[Tt]rue|[Yy]es"));
str = "no";
System.out.println("Is it true or yes ? : " + str.matches("[Tt]rue|[Yy]es"));
正規表現の |
はorを意味します。
Output:
Is it true or yes ? : true
Is it true or yes ? : true
Is it true or yes ? : false
文字、数字パターンの検索
次の例では、aが0個以上、そして数が0個以上のパターンを検索します。
String str = "aaa123";
System.out.println(str.matches("a*[0-9]*"));
Output:
true
文字列パターンの検索
以下は、「H」で開始し、次のいくつかの文字が来て、最後に「llo」で終わってパターンを検索します。
System.out.println("Hello".matches("H.llo"));
System.out.println("Hallo".matches("H.llo"));
System.out.println("Hollo".matches("H.llo"));
Output:
true
true
true
正規表現の .
はどの文字1つを意味します。したがってHの次にどのような文字1ついればされます。
EXで始まるパターンの検索
以下は、「EX_ "で始まり、その次のa〜gの文字がまたは1〜5の数字が来るパターンを検索します。
System.out.println("Ex_a".matches("Ex_[a-g1-5]"));
System.out.println("Ex_g".matches("Ex_[a-g1-5]"));
System.out.println("Ex_1".matches("Ex_[a-g1-5]"));
System.out.println("Ex_6".matches("Ex_[a-g1-5]"));
Output:
true
true
true
false
正規表現で a-g
はaからgまでのアルファベット1つを意味します。
そして、 1-5
は1から5までの数字1つを意味します。
Thisで開始し。で終わるパターン
次はThisで開始し、 "。"で終わるパターンを検索します。もし ""で終わらない場合はfalseを返します。
System.out.println("This is the right decision.".matches("This.*\\."));
System.out.println("This is me".matches("This.*\\."));
System.out.println("This is my mistake.".matches("This.*\\."));
Output:
true
false
true
正規表現 .
ではなく、単に文字 .
を表現したい場合は、 \\.
に書いてなければなり。
It + a fewパターンの検索
Itで開始しa fewが中間に入っているパターンを探します。
System.out.println("It's been a few days".matches("It.+a few.*"));
System.out.println("It's been a few over a year".matches("It.+a few.*"));
System.out.println("It's been about a week".matches("It.+a few.*"));
Output:
true
true
false
正規表現で .+
は文字1つ以上を意味します。
[A-1]パターンの検索
次は、 "[A-数字]"で始まるパターンを検索します。
System.out.println("[A-1] Jason".matches("\\[A\\-.+\\].*"));
System.out.println("[A-12] Todd".matches("\\[A\\-.+\\].*"));
System.out.println("[B-12] MJ".matches("\\[A\\-.+\\].*"));
Output:
true
true
false
正規表現で単純な文字の意味で [
を使用するには、 \\[
で入力する必要があります。 -
の場合でも、 \\-
で入力する必要があります。
Patternにmatchesを適用する方法
String.matches()
ではなく、Patternクラスを使用して、matchesを適用することができます。
次のように Pattern.matches()
のregexとstringを引数として渡すと、 String.matches()
と同じ結果を返します。
String text = "The URL is: http://mydomain.com";
String regex = ".*http://.*";
boolean matches = Pattern.matches(regex, text);
System.out.println(matches);
参考
Related Posts
- Java - AtomicReference使用方法
- Java - CountDownLatchを使用する方法、および例
- Java - ScheduledThreadPoolExecutor使用方法
- Java - SummaryStatisticsの使用方法(count、min、max、average)
- Java8 - 関数型インタフェース (Functional Interface) について
- Java - String配列をint配列に変換する
- Java - ArrayList要素の値を変更する方法、replaceAll()
- Java - 2つのリストが同じかどうかを比較
- Java - 配列から特定のIndex要素を削除する3つの方法
- Java - HashMapソート、4つの方法
- Java - 文字列を配列に変換する方法
- Java - ArrayListが空であることを確認する3つの方法
- Java - ArrayListの巡回、4つの方法
- Java - ArrayListの最大値、最小 値を見つける
- Java - ArrayListの合計、平均値の計算
- Java - HashMap巡回、3つの方法
- Java - do whileとwhileの違い
- Java - Lambda式と関数型インタフェース
- Java - List empty(null)チェック、3つの方法
- Java - ArrayListの初期化、4つの方法
- Java - Stream.reduce()の使い方と例
- Java - 2つのマップを結合する(merge、putAll)
- Java - java.util.Dateをjava.sql.Dateに変換する
- Java - ArrayListをStringに変換する
- Java - ClassNotFoundExceptionの発生原因と解決策
- Java - 非静的メソッドは静的コンテキストから参照できません
- Java - NoSuchMethodErrorの原因と解決策
- Java - JSONライブラリを使用する方法(JSONObject、JSONArray)
- Java - byte[]配列をFileに保存
- Java - byte[]の配列をStringに変換
- Java - ファイルのアクセス権を確認し、変更
- Java - 一時フォルダ(Temp directory)パスを取得する
- Javaでシェルスクリプトを実行
- Java - Streamを配列に変換する
- Java - リスト重複排除、2つの方法