Буферный читатель Java останавливает чтение строк, если я добавлю оператор if в цикл while:

Я создаю игровой движок с нуля с Java, я начал работу над новым файлом сохранения вместо использования изображений для карт:

Работает и распечатывает каждую строку:

while ((readString = buf.readLine()) != null) {
    System.out.println("Failed to assign action to line: " + readString);
}

Не работает, выводит первые 3 строки:

while ((readString = buf.readLine()) != null) {
                if (readString.contains("Width:")){
                    readString.replace("Width:", "");
                    readString.trim();
                    Integer.parseInt(readString);
                    System.out.println(readString);
                }else if (readString.contains("Height:")){
                    readString.replace("Height::", "");
                    readString.trim();
                    Integer.parseInt(readString);
                    System.out.println(readString);
                }else{
                    System.out.println("Failed to assign action to line: " + readString);
                }
}

Как видите, верхняя часть работает и выводит каждую строку на консоль, вторая останавливается после прочтения 3-й строки. Во время исследования проблемы я ничего не нашел, и мой синтаксис, кажется, правильный. Что не так с моим кодом?

2 ответа

Вероятно, есть исключение, которого вы не видите.

Поместите это вокруг вашего кода:

try {
   //.. your while-loop here
}
catch(Exception e) {
   e.printStackTrace();
}

Затем исправьте ошибку.

Еще один намек: readString.replace("Width:", ""), readString.trim() а также Integer.parseInt(readString) не сработает Функции не изменяют саму переменную, вам нужно присвоить их результаты переменной.

Пример:

 readString = readString.trim();

Вероятно, есть исключение, что вы проглатываете (ловите и игнорируете) свою программу, и это наиболее вероятные кандидаты:

Строки являются неизменяемыми, поэтому при замене / обрезке исходная строка остается такой же, и возвращается новая.

} else if (readString.contains("Height:")){
    readString.replace("Height::", "");
    readString.trim();
    Integer.parseInt(readString);

Здесь вы игнорируете возвращенные (новые) строки и продолжаете работать с исходной строкой. Кроме того, как вы можете видеть, вы проверяете Height: и вы удалите Height:: (обратите внимание на двойное двоеточие). Так что, если ваши данные на самом деле не содержат Height:: Height: останется в строке при вызове Integer.parseInt это вызывает исключение.

Так должно быть больше

} else if (readString.contains("Height:")){
    readString = readString.replace("Height:", "");
    readString = readString.trim();
    Integer.parseInt(readString);
Другие вопросы по тегам