当使用find()和“”作为模式时,为什么匹配器会永远循环?

问题描述 投票:2回答:1

当空字符串作为模式时,以下代码永远循环。为什么这段代码永远循环?我是否滥用了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++);
        }
java regex loops match
1个回答
2
投票

由于模式是空字符串,因此pos值始终为零。在这种情况下,您不需要将pos参数传递给find。只需打电话给no-arg find。请注意,两个方法重载的行为不同。对于find(index)

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

对于no-arg find()

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

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

© www.soinside.com 2019 - 2024. All rights reserved.