Есть текстовый файл, который содержит целые числа, каждое с новой строки:
num.txt
32
4
8
3
2
При выполнении следующего кода:
public static void main(String[] args) throws IOException {
BufferedReader reader1 = new BufferedReader(new InputStreamReader(System.in));
String name = reader1.readLine();
BufferedReader reader = new BufferedReader(new FileReader(name));
while (reader.ready()) {
buf = reader.readLine();
System.out.println(Integer.parseInt(buf));
}
}
Вылетает ошибка NumberFormatException.
При работе с консолью всё работает нормально.
Считывает он вроде то что нужно:
public static void main(String[] args) throws IOException {
BufferedReader reader1 = new BufferedReader(new InputStreamReader(System.in));
String name = reader1.readLine();
BufferedReader reader = new BufferedReader(new FileReader(name));
String buf = "";
try {
while (reader.ready()) {
buf = reader.readLine();
System.out.println(Integer.parseInt(buf));
}
} catch (Exception e) {
System.out.println("Мы считали: " + buf);
}
}
Мы считали: 32
Где ошибка?
Если метод trim не справляется с задачей (в частности, он удаляет только символы с кодами от 0 до 32 включительно и только из начала и конца строки), то справиться может replaceAll:
buf = buf.replaceAll("[^0-9]", "");
Который удалит из строки все символы, не являющиеся цифрами.
Чтобы выяснить какие же символы содержатся в строке, можно воспользоваться таким методом:
private static void displayChars(String str)
{
for (int i = 0; i < str.length(); i++)
{
System.out.print((int)str.charAt(i) + " ");
}
}
Если System.out.println("Мы считали: " + buf); заменить на displayChars(buf);, то должно стать понятно что же за символы "портят жизнь".
Таким символом может оказаться 65279 (то есть BOM), находящий в самом начале файла.
Ошибка возникает, скорее всего, из-за того, что после числа идет пробел или какой-то другой подобный символ. Есть предложение: после считывания строки вызвать для неё метод trim(). Этот метод удаляет пробелы в начале и конце строки.
Тогда парсинг будет выглядеть так:
Integer.parseInt(buf.trim())
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости