Ошибка java.lang.NumberFormatException: для входной строки:

я пытаюсь прочитать этот файл

C101

VEHICLE
NUMBER     CAPACITY
  25         200

CUSTOMER
CUST NO.  XCOORD.   YCOORD.    DEMAND   READY TIME  DUE DATE   SERVICE   TIME

    0      40         50          0          0       1236          0   
    1      45         68         10        912        967         90   
    2      45         70         30        825        870         90   
    3      42         66         10         65        146         90   
    4      42         68         10        727        782         90   
    5      42         65         10         15         67         90   
    6      40         69         20        621        702         90   
    7      40         66         20        170        225         90   
    8      38         68         20        255        324         90   

Но когда я читаю файл, программа выдает мне это исключение:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)
    at VRP.main(VRP.java:43)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

Я проверил свой код и отладил, но не могу найти проблему.

Я использовал массив, чтобы сохранить все пробелы между столбцами (я прочитал только первые четыре столбца), а затем ArrayList, но это не сработало.

    public static void main(String[] args) throws Exception {

    File f = new File("C101.txt");
    FileReader fr = new FileReader(f);
    BufferedReader reader = new BufferedReader(fr);

    String nada = reader.readLine();  //C101
    nada = reader.readLine();         //espacio en blanco
    nada = reader.readLine();         //vehicle=25
    nada = reader.readLine();         //number, capacity
    nada = reader.readLine();         //25, 200
    nada = reader.readLine();         //espacio en blanco
    nada = reader.readLine();         //customer
    nada = reader.readLine();         //encabezados
    nada = reader.readLine();         //espacio en blanco

    String[] espacios;
    int capacity = 200;
    int custno, xcoord, ycoord, demand;

    ArrayList<String> guardar = new ArrayList<String>();

    while (reader.ready()) {
        espacios = reader.readLine().trim().split(" ");
        for (int i = 0; i < espacios.length; i++) {
            guardar.add(espacios[i]);
        }
        custno = Integer.parseInt(espacios[0]);
        xcoord = Integer.parseInt(espacios[1]);
        ycoord = Integer.parseInt(espacios[2]);
        demand = Integer.parseInt(espacios[3]);
    }
}

Извините за неудобства и спасибо за ваше время.


person ArCiGo    schedule 03.02.2014    source источник


Ответы (2)


Вы разбиваете на один пробел, но между целочисленными столбцами есть более одного пробела

espacios = reader.readLine().trim().split("\\s+");
person Reimeus    schedule 03.02.2014
comment
Вполне вероятно, что это решило проблему, но лишняя строка в конец файла вызвал ту же проблему позже при чтении файла - person Reimeus; 03.02.2014

Вы должны убедиться, что числа с espacios[0] по espacios[3] на самом деле являются целыми числами. Что вам, вероятно, следует сделать, так это распечатать их для проверки. Если один из них не является целым числом, Integer.parseInt() выдаст это исключение.

person La-comadreja    schedule 03.02.2014
comment
Но все числа целые - person ArCiGo; 03.02.2014
comment
@ArCiGo: вам нужно либо использовать отладчик, либо печатать что-нибудь. Выбросьте все предположения в окно. 1+ к ответу. - person Hovercraft Full Of Eels; 03.02.2014
comment
Нашел ошибку: в конце .txt файла автор оставил пробел - person ArCiGo; 03.02.2014