Stringのmatches、containsメソッド等を使った部分一致、完全一致を解説します!
matchesの場合は正規表現が使えますが、containsなどの判定メソッドで使えないのでご注意ください。
よく使う正規表現
machesメソッドでは正規表現が使えます。その時よく使う正規表現は以下かなと思います。
正規表現 | 読み方 | 意味 |
---|---|---|
^ | ハット | 行頭 |
$ | ドル | 行末 |
. | ドット | 任意の1文字 どんな文字でもかまいませんが、1文字が必ずあることを示します |
* | アスタリスク | 直前のパターンの0回以上繰り返し 例えば、「.*」は「.」が0回以上繰り返されるということです。 0回もあり得るため、繰り返さないパターンも含みます。 (例) 正規表現:^123.* Trueになるパターン:123、1234、123AAAA |
+ | プラス | 直前のパターンの1回以上繰り返し |
部分一致(あいまい検索)
matches
例えば「.*456.*」のように、任意の指定した文字列が含まれるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 部分一致(あいまい検索) String str4 = "1234567890"; // True System.out.println(str4.matches(".*456.*")); // 3文字の部分一致 System.out.println(str4.matches("^.*1234567890.*")); // 任意の0文字以上 + 10文字 + 任意の0文字以上の部分一致 System.out.println(str4.matches("^.23456789.")); // 任意の1文字 + 8文字 + 任意の1文字の部分一致 // False System.out.println(str4.matches(".*444.*")); // 3文字の部分一致 System.out.println(str4.matches(".1234567890.")); // 任意の1文字 + 10文字 + 任意の1文字の部分一致 |
contains
containsメソッドを使う場合、指定した文字列が含まれていればTrueを返します。
1 2 3 4 5 6 7 8 9 10 |
// 部分一致(あいまい検索) String str4 = "1234567890"; // True System.out.println(str4.contains("456")); // 任意の3文字 // False System.out.println(str4.contains("444")); // 任意の3文字 |
前方一致
matches
前方一致には、「^(ハットマーク)」を使います。
※帽子のような形をしているため、ハット(hat)と呼んでいます。
「^」は文字列の最初であることを示す記号です。
「^123.*」のように、先頭に一致してほしい文字列を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 前方一致 String str2 = "1234567890"; // True System.out.println(str2.matches("^123.*")); // 3文字の前方一致 System.out.println(str2.matches("^1234567890.*")); // 10文字 + 任意の0文字以上の前方一致 System.out.println(str2.matches("^123456789.")); // 9文字 + 任意の1文字の前方一致 // False System.out.println(str2.matches("^124.*")); // 3文字の前方不一致 System.out.println(str2.matches("^1234567890.")); // 10文字 + 任意の1文字の前方不一致 |
startsWith
前方一致にはstatsWithメソッドも使えます。
前方一致してほしい文字列を指定すればよいだけですが、正規表現は使えないのでその場合はmatchesを検討して下さい。
1 2 3 4 5 6 7 8 9 10 11 |
// 前方一致 String str2 = "1234567890"; // True System.out.println(str2.startsWith("123")); // startWithメソッドによる前方一致 // False System.out.println(str2.startsWith("234")); // startWithメソッドによる前方不一致 System.out.println(str2.startsWith("123.*")); // startWithメソッドで正規表現は使用不可 |
後方一致
matches
後方一致には、「$(ドル)」を使います。
「$」は文字列の最後であることを示す記号です。
「.*890$」のように、後方に一致してほしい文字列を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 後方一致 String str3 = "1234567890"; // True System.out.println(str3.matches(".*890$")); // 任意の0文字以上 + 3文字の後方一致 System.out.println(str3.matches(".*1234567890$")); // 任意の0文字以上 + 10文字の後方一致 System.out.println(str3.matches(".234567890$")); // 任意の1文字 + 9文字の後方一致 // False System.out.println(str3.matches(".*190$")); // 任意の0文字以上 + 3文字の後方不一致 System.out.println(str3.matches(".1234567890$")); // 任意の1文字 + 10文字の後方不一致 |
endsWith
後方一致にはendsWithメソッドが使えます。
startsWith同様に正規表現は使えないのでmatchesを検討して下さい。
1 2 3 4 5 6 7 8 9 10 11 |
// 後方一致 String str3 = "1234567890"; // True System.out.println(str3.endsWith("890")); // endsWithメソッドによる後方一致 // False System.out.println(str3.endsWith("789")); // endsWithメソッドによる後方不一致 System.out.println(str3.endsWith(".*890")); // endsWithメソッドで正規表現は使用不可 |
完全一致
完全一致は文字列が同じであることを判定するだけですので、matchesを使うなら正規表現は使わずに判定します。
そうするとただの文字列の一致判定なので、equalsで問題ありません。
matches or equals
1 2 3 4 5 6 7 8 9 10 11 12 |
// 完全一致 String str1 = "1234567890"; // True System.out.println(str1.matches("1234567890")); System.out.println(str1.equals("1234567890")); // False System.out.println(str1.matches("123456789")); System.out.println(str1.equals("123456789")); |
まとめ
- 部分一致には、前方/後方/部分一致がある。
- 前方一致には、matchesメソッドで^を使うかstartsWithを使う。
- 後方一致には、matachesメソッドで$を使うかendsWithを使う。
- 部分一致には、matachesメソッドで^と$を使った正規表現か、containsメソッドで判定できる。
- 完全一致は、文字列が全く同じであること。
- matachesメソッドでは .と*で、任意の文字を指定して、柔軟な判定ができる。
参考(Java Docs)
[Java Docs] String matches(String regex)
コメント