本文正在参加「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());