当空字符串作为模式时,以下代码永远循环。为什么这段代码永远循环?我是否滥用了find(int)方法?
Pattern pattern = Pattern.compile("");
Matcher matcher = pattern.matcher("some text");
int pos = 0;
int i = 0;
while (matcher.find(pos))
{
int start = matcher.start();
int end = matcher.end();
pos = end;
System.out.format("%d", i++);
}
由于模式是空字符串,因此pos
值始终为零。在这种情况下,您不需要将pos
参数传递给find
。只需打电话给no-arg find
。请注意,两个方法重载的行为不同。对于find(index)
:
重置此匹配器,然后尝试从指定的索引处开始查找与模式匹配的输入序列的下一个子序列。
对于no-arg find()
:
尝试查找与模式匹配的输入序列的下一个子序列。
此方法从此匹配器区域的开头开始,或者,如果方法的先前调用成功并且匹配器尚未重置,则在第一个与上一个匹配不匹配的字符处开始。