while (Matcher.find ()) зацикливается бесконечно - PullRequest
0 голосов
/ 30 июня 2011

Я изменил следующий код из Oracle 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, с которым я также не очень знаком.Я не мог понять, как заставить консоль не инициализироваться нулем (как предупреждает учебник), поэтому я удалил ее и просто использую статические значения и перекомпилирую каждый раз, когда я хочу попробовать что-то новое.

Когда я запускаю этот код, я получаю бесконечный цикл:

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.

и т. Д., И т. Д., И т. Д. До тех пор, пока я не нажму на завершение

Что я делаю неправильно?

Спасибо.

Неважно ...>. <Почему-то я не видел бесконечный цикл снаружи.Я все время предполагал, что проблема была в другом цикле. </p>

Ответы [ 5 ]

10 голосов
/ 30 июня 2011

В данный момент у вас есть while(true) вокруг этого раздела вашего кода.while(true) - это бесконечный цикл, и вам, кажется, никогда не выйти из него.

7 голосов
/ 30 июня 2011

Это while(true) никогда завершается!

3 голосов
/ 30 июня 2011

while(true){...} известен как бесконечный цикл . Единственный способ остановить выполнение такого цикла - вставить break, иначе вы застрянете в этом блоке кода

enter image description here

3 голосов
/ 30 июня 2011

В вашем цикле while нет завершающего условия.

В описании упражнения на вашей связанной странице также указано, что программа повторяет цикл.

3 голосов
/ 30 июня 2011

Внешний цикл while(true) предназначен только для демонстрационных целей, поэтому он может постоянно запрашивать ввод данных.Вам не нужно постоянно просить ввода;поэтому петлю while(true) следует удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...