File fil = new File("Tall.txt");
FileReader inputFil = new FileReader(fil);
BufferedReader in = new BufferedReader(inputFil);
int [] tall = new int [100];
String s =in.readLine();
while(s!=null)
{
int i = 0;
tall[i] = Integer.parseInt(s); //this is line 19
System.out.println(tall[i]);
s = in.readLine();
}
in.close();
Я пытаюсь использовать файл "Tall.txt" для записи содержащихся в нем целых чисел в массив с именем "tall". В некоторой степени это удается, но когда я запускаю его, он выбрасывает следующее исключение (:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at BinarySok.main(BinarySok.java:19)
Почему именно так происходит, и как мне это устранить? Как я понимаю, я читаю файл как строки, а затем конвертирую их в инты, что не является незаконным.
В вашем файле должна быть пустая строка.
Возможно, вы захотите обернуть вызов parseInt в блок "try":
try {
tall[i++] = Integer.parseInt(s);
}
catch (NumberFormatException ex) {
continue;
}
Или просто проверьте пустые строки перед разбором:
if (s.length() == 0)
continue;
Обратите внимание, что при инициализации вашей индексной переменной i
внутри цикла, она всегда равна 0. Вам следует переместить объявление перед циклом while
. (Или сделать его частью цикла for
).
Похоже, что Java пытается преобразовать пустую строку в число. Есть ли у вас пустая строка в конце серии чисел?
Возможно, вы можете исправить код следующим образом
String s = in.readLine();
int i = 0;
while (s != null) {
// Skip empty lines.
s = s.trim();
if (s.length() == 0) {
continue;
}
tall[i] = Integer.parseInt(s); // This is line 19.
System.out.println(tall[i]);
s = in.readLine();
i++;
}
in.close();
Вы можете перепутать разные варианты окончания строк. В файле Windows каждая строка заканчивается возвратом каретки и переводом строки. Некоторые программы на Unix будут читать этот файл так, как будто между каждой строкой есть дополнительная пустая строка, потому что они будут воспринимать возврат каретки как конец строки, а затем воспринимать перевод строки как еще один конец строки.