Java новичок: бесконечный цикл поиска определенного текста в файле - PullRequest
2 голосов
/ 28 августа 2009

Мне нужно найти строку на определенной строке в текстовом файле, который состоит из нескольких строк строк. Тем не менее, мой цикл поиска текста или конца файла постоянно ищет. Я знаю, что строка находится в файле. Вот код, который я использую, чтобы найти текст, но будьте осторожны, если вы попробуете его в своей системе даже с простым текстовым файлом, он попадет в вечный цикл.

Я очень ценю любые советы или указатели, объясняющие, что я здесь делаю неправильно.

private static void locateText(String locateText, BufferedReader locateBffer) {
    boolean unfound = true;
    try
    {
        String line = locateBffer.readLine();
        while (unfound)
        {
            line = locateBffer.readLine();
            if ((line.equals(locateText)) || (line == null))
            {
                unfound = false;
            }
        }
    }
    catch(IOException e)
    {
        System.out.println("I/O error in locateText");
    }
}

Обновление: Обнаружена проблема - не найдено совпадение в первой строке файла.

Ответы [ 3 ]

5 голосов
/ 28 августа 2009

Я думаю, что GaryF прав (ваш текст находится в первой строке вашего файла).

Я хотел указать строку в вашем коде:

if ((line.equals(locateText)) || (line == null)) {

вместо этого вы должны написать:

if ((line == null) || (line.equals(locateText)) {

Действительно, если строка равна нулю, ваш код выдаст исключение NullPointerException. Вот почему вы должны проверить, является ли line null раньше.

В дополнение к этому, я предлагаю вам заглянуть в библиотеку commons.lang Apache , поскольку она предоставляет весьма полезные классы для текста (например, StringUtils) ...

4 голосов
/ 28 августа 2009

Ваш текст случайно найден в первой строке? Вы выполняете операцию readLine вне цикла, а затем внутри, поэтому первая строка в основном игнорируется.

0 голосов
/ 28 августа 2009

Измените этот цикл на что-то подобное, и он будет читать все строки:

while((line = locateBffer.readLine()) != null){
 if(line.equals(locateText)){
     break;  
 }
}

Может быть, это поможет.

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