Java: Чтение целых чисел из файла в массив

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).

Комментарии (1)

Похоже, что 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();
Комментарии (0)

Вы можете перепутать разные варианты окончания строк. В файле Windows каждая строка заканчивается возвратом каретки и переводом строки. Некоторые программы на Unix будут читать этот файл так, как будто между каждой строкой есть дополнительная пустая строка, потому что они будут воспринимать возврат каретки как конец строки, а затем воспринимать перевод строки как еще один конец строки.

Комментарии (1)