Java Regexにおけるmatches()とfind()の違い 質問する

Java Regexにおけるmatches()とfind()の違い 質問する

私は違いを理解しようとしていますmatches()そしてfind()

Javadoc によれば、(私が理解している限りでは) は、matches()探しているものが見つかった場合でも文字列全体を検索し、find()探しているものが見つかると停止します。

その仮定が正しい場合、見つかった一致の数をカウントしたい場合を除き、matches()の代わりにを使用する必要があるかどうかはわかりません。find()

私の意見では、String クラスには組み込みメソッドのfind()代わりにが必要です。matches()

まとめると次のようになります。

  1. 私の仮定は正しいでしょうか?
  2. matches()の代わりにを使用すると便利なのはいつですかfind()?

ベストアンサー1

matches文字列全体に対して式を照合し、パターンの^先頭と$末尾に暗黙的に a を追加します。つまり、部分文字列は検索されません。したがって、このコードの出力は次のようになります。

public static void main(String[] args) throws ParseException {
    Pattern p = Pattern.compile("\\d\\d\\d");
    Matcher m = p.matcher("a123b");
    System.out.println(m.find());
    System.out.println(m.matches());

    p = Pattern.compile("^\\d\\d\\d$");
    m = p.matcher("123");
    System.out.println(m.find());
    System.out.println(m.matches());
}

/* output:
true
false
true
true
*/

123は の部分文字列なのでa123bfind()メソッドは true を出力します。matches()'sees' のみa123bが と同じではないので123、 false を出力します。

おすすめ記事