10.6 Java Regex中match()和find()之间的区别 | Java Debug 笔记

303 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

**提问:Java Regex中match()和find()之间的区别 **

我想明白matches()和find()之间的差别。

根据Javadoc,(据我了解),matches()即使找到了所要查找的内容,也将搜索整个字符串,并find()在找到所要查找的内容时停止。

如果这个matches()的find()的解释是正确的,那么除非您要计算找到的匹配项的数量,否则我看不到您想使用matches()代替find()的任何使用场景。

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

所以,总结下我的问题: 1, 我的假设正确吗? 2, 什么时候matches()代替find()?

回答1:

matches()仅当完整字符串匹配时才返回true。 find()将尝试在与正则表达式匹配的子字符串中查找下一个匹配项。请注意对“下一个”的强调。这意味着find()多次调用的结果可能会不同。另外,通过使用start()可以返回子字符串被匹配的位置。

final Matcher subMatcher = Pattern.compile("\\d+").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + subMatcher.matches());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find());
System.out.println("Found: " + subMatcher.find());
System.out.println("Matched: " + subMatcher.matches());

System.out.println("-----------");
final Matcher fullMatcher = Pattern.compile("^\\w+$").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + fullMatcher.find() + " - position " + fullMatcher.start());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());