我仍然无法理解matches()和find()中的差异,这里是代码
final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
System.out.println("Found : " + subMatcher.find());
输出
Found : true
Found : false
我对匹配的理解和从answer中找到的是,matches()尝试匹配整个字符串,而find()只尝试匹配下一个匹配的子字符串,匹配器添加^和$ meta-character开始和开始,如果我们多次使用它,find()会有不同的结果,但是这里仍然是123子串,第二个输出应该是真的。如果我注释掉第二行,那么它确实显示输出为真
答案 0 :(得分:4)
当您致电matches()
时,Matcher
已经搜索了匹配项(整个String
)。调用find
Matcher
将尝试在当前匹配后再次找到该模式,但由于在匹配整个String
的匹配项后没有剩余字符,find
会返回false
。
要再次搜索String
,您需要创建新的Matcher
或致电reset()
:
final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
subMatcher.reset();
System.out.println("Found : " + subMatcher.find());