Буферный читатель 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);