while(Matcher.find())无限循环

时间:2011-06-30 16:40:53

标签: java regex eclipse loops

我从Oracle's Java Tutorials修改了以下代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexTestHarness {

public static void main(String[] args){

    while (true) {
        Pattern pattern = Pattern.compile("foo");
        Matcher matcher = pattern.matcher("foo foo foo");

        boolean found = false;
        while (matcher.find()) {
            System.out.format("I found the text \"%s\" starting at " + "index %d and ending at index %d.%n", matcher.group(), matcher.start(), matcher.end());
            found = true;
        }
        if(!found){
            System.out.format("No match found.%n");
        }
    }
}
}

我正在尝试学习如何在Java中使用正则表达式。 (我对正则表达式非常有信心,只是没有Java的类使用它们。)我正在使用Eclipse,我也不是非常熟悉。我无法弄清楚如何让控制台不被初始化为null(正如教程警告的那样),所以我删除了它,我只是使用静态值并重新编译每次我想尝试新的东西。

当我运行此代码时,我得到一个无限循环:

I found the text "foo" starting at index 0 and ending at index 3.
I found the text "foo" starting at index 4 and ending at index 7.
I found the text "foo" starting at index 8 and ending at index 11.
I found the text "foo" starting at index 0 and ending at index 3.

等等等,直到我点击终止

我做错了什么?

感谢。

没关系......>。<出于某种原因,我没有看到外面的无限循环。我一直认为这是问题的另一个循环。

5 个答案:

答案 0 :(得分:10)

您目前在代码的这一部分有一个while(true)while(true)是一个无限循环,你似乎永远不会突破它。

答案 1 :(得分:7)

while(true) 从不 终止!

答案 2 :(得分:3)

外部while(true)循环仅用于演示目的,以便它可以继续询问您的输入。你不需要继续要求输入;所以应删除while(true)循环。

答案 3 :(得分:3)

你的while循环中没有终止条件。

链接页面上的练习描述也表明程序反复循环。

答案 4 :(得分:3)

while(true){...}被称为无限循环。停止执行此类循环的唯一方法是插入break,否则您将陷入该代码块

enter image description here