我试图理解 和 之间的matches()区别find()。
matches()
find()
根据Javadoc,(据我了解),matches()即使它找到了它正在寻找的东西,它也会搜索整个字符串,并且find()在它找到它正在寻找的东西时会停止。
如果该假设是正确的,那么我看不到您何时想要使用matches()而不是find(),除非您想计算它找到的匹配数。
在我看来,String 类应该具有find()而不是matches()作为内置方法。
所以总结一下:
matches尝试将表达式与整个字符串进行匹配,并在模式^的开头和$结尾隐式添加 a,这意味着它不会查找子字符串。因此这段代码的输出:
matches
^
$
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,因此输出错误。
123
a123b