小编典典

Java Regex中matches()和find()的区别

all

我试图理解 和
之间的matches()区别find()

根据Javadoc,(据我了解),matches()即使它找到了它正在寻找的东西,它也会搜索整个字符串,并且find()在它找到它正在寻找的东西时会停止。

如果该假设是正确的,那么我看不到您何时想要使用matches()而不是find(),除非您想计算它找到的匹配数。

在我看来,String 类应该具有find()而不是matches()作为内置方法。

所以总结一下:

  1. 我的假设正确吗?
  2. 什么时候使用matches()而不是有用find()

阅读 159

收藏
2022-04-29

共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是的子字符串,a123b因此该find()方法输出
true。matches()只有“看到”a123b与“看到”不同123,因此输出错误。

2022-04-29