当将空字符串作为模式给出时,以下代码将永远循环。为什么这段代码永远循环?我是否滥用了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++);
}
答案 0 :(得分:2)
由于模式是空字符串,/project/parent/version
值始终为零。在这种情况下,您不需要将pos
参数传递给pos
。只需拨打no-arg find
即可。请注意,两个方法重载的行为不同。对于find
:
重置此匹配器,然后尝试从指定的索引处开始查找与模式匹配的输入序列的下一个子序列。
对于no-arg find(index)
:
尝试找到与模式匹配的输入序列的 next subsequence 。
此方法从此匹配器区域的开头开始,或者如果方法的先前调用成功且匹配器尚未重置,则第一个字符与之前不匹配匹配即可。