我试图理解 matches()
以及 find()
.
根据javadoc(据我所知), matches()
将搜索整个字符串,即使它找到了要查找的内容,并且 find()
当它找到它要找的东西时就会停止。
如果这个假设是正确的,我看不出你想用什么时候 matches()
而不是 find()
,除非您要计算它找到的匹配数。
在我看来,string类应该 find()
而不是 matches()
作为一种内在的方法。
总结一下:
我的假设正确吗?
什么时候有用 matches()
而不是 find()
?
5条答案
按热度按时间v2g6jxz61#
matches()
仅当匹配完整字符串时才返回true。find()
将尝试在子字符串中查找与正则表达式匹配的下一个匹配项。注意强调“下一个”。也就是说,打电话的结果find()
多次可能不一样。此外,通过使用find()
你可以打电话start()
返回子串匹配的位置。将输出:
所以,打电话时要小心
find()
如果Matcher
对象没有重置,即使正则表达式被^
以及$
匹配整个字符串。2izufjch2#
find()
将根据正则表达式考虑子字符串,其中matches()
将考虑完整的表达。find()
仅当表达式的子字符串与模式匹配时,才会返回true。omqzjyyz3#
matches
尝试将表达式与整个字符串匹配,并隐式添加^
开始和结束时$
在模式的末尾,意味着它不会寻找子字符串。因此,此代码的输出:yi0zb3m44#
matches
如果整个字符串与给定模式匹配,则返回true。find
尝试查找与模式匹配的子字符串。zpjtge225#
matches();
不缓冲,但find()
缓冲器。find()
首先搜索到字符串的末尾,对结果编制索引,然后返回布尔值和相应的索引。这就是为什么当你有一个像
第4点:使用模式结构的regex引擎将通读整个代码(由
regex[single character]
找到至少一个匹配项。如果找到这样的匹配项,它将被索引,然后循环将根据索引结果执行,否则,如果它没有进行如下的提前计算matches()
; 没有。while语句永远不会执行,因为匹配字符串的第一个字符不是字母表。