这是我在给定字符串中查找"ab"
模式的代码。
import java.util.regex.*;
public class RegExp
{
public static void main(String[] args)
{
Pattern p = Pattern.compile("ab");
Matcher m = p.matcher("ababbaba");
while(m.find())
{
System.out.println(m.start());
}
}
}
但我无法理解find()
和start()
的内部工作情况。
答案 0 :(得分:4)
find
方法扫描输入序列,查找与模式匹配的下一个子序列,并返回表示失败成功的boolean
。
内部find
方法调用search
方法(访问控制默认值),以便启动搜索以在给定范围内查找Pattern
。在每次比赛时,界限将增加,直到找到所有比赛。
在Matcher
类后面,它是一个状态机,它将保持匹配状态。
另一方面,start
方法将起始索引作为最新匹配捕获的子序列的int
返回。
如果您想要更深入,我建议您查看Matcher
课程的source code。
答案 1 :(得分:2)
您可以阅读in the documentation of find()
:
尝试找到输入序列的下一个子序列 匹配模式。
此方法从此匹配器区域的开头开始,或者,如果是 以前的方法调用是成功的,匹配器有 从没有重置,在第一个字符不匹配 上一场比赛。
如果匹配成功,则可以通过获得更多信息 开始,结束和分组方法。
因此,当您第一次致电matcher(String text)
没有任何反应时。只有当您致电find()
时,它才会找到第一个匹配。如果您第二次致电find()
,它的目标是找到下一场比赛,依此类推。
以下序列图描述了会发生什么:
构造匹配器,每次调用find()
时,“光标”移动到下一个匹配。
答案 2 :(得分:0)
更新:
find()
尝试查找与模式匹配的子字符串。start()
返回子字符串匹配的位置。matches
返回true。