Java 为什么使用find()和";时matcher会永远循环&引用;作为一种模式?

Java 为什么使用find()和";时matcher会永远循环&引用;作为一种模式?,java,regex,loops,match,Java,Regex,Loops,Match,当给定空字符串作为模式时,以下代码将永远循环。为什么这段代码会永远循环?我是否误用了find(int)方法 由于模式是空字符串,pos值将始终为零。在这种情况下,不需要将pos参数传递给find。只需调用no argfind。请注意,这两个方法重载的行为不同。对于查找(索引): 重置此匹配器,然后尝试从指定索引开始查找与模式匹配的输入序列的下一个子序列 对于no argfind(): 尝试查找与模式匹配的输入序列的下一个子序列 此方法从该匹配器区域的开头开始,或者,如果先前成功调用了该方法,并且

当给定空字符串作为模式时,以下代码将永远循环。为什么这段代码会永远循环?我是否误用了find(int)方法


由于模式是空字符串,
pos
值将始终为零。在这种情况下,不需要将
pos
参数传递给
find
。只需调用no arg
find
。请注意,这两个方法重载的行为不同。对于
查找(索引)

重置此匹配器,然后尝试从指定索引开始查找与模式匹配的输入序列的下一个子序列

对于no arg
find()

尝试查找与模式匹配的输入序列的下一个子序列

此方法从该匹配器区域的开头开始,或者,如果先前成功调用了该方法,并且此后未重置匹配器,则从第一个未与先前匹配的字符开始


由于
end=start
,如果匹配字符串为空,因此长度为0。因此,你永远不会改变立场。你可能想和你一起做点什么
i
:-).ty。我向用户公开regexp。用户可以在textarea中编辑regex,并针对另一个textarea的文本运行它。代码依赖于find(int)来突出显示找到的字符串。这里的问题是,只有当用户给出“”字符串时,才会在运行时发生循环,并且只有在测试时才会发现此问题。你知道还有其他的正则表达式可以破解这个代码吗?是的,,*,.{0,42}等等。我会先用一个空字符串测试正则表达式,或者手动将位置增加至少1,例如在代码中
pos=Math.max(pos+1,end)
        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++);
        }