Ошибка 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]);
}
}
Извините за неудобства и спасибо за ваше время.
2 ответа
Вы разбиваете на один пробел, но между целочисленными столбцами больше одного пробела
espacios = reader.readLine().trim().split("\\s+");
Вы должны убедиться, что espacios[0]
через espacios[3]
на самом деле целые числа. Что вы, вероятно, должны сделать, это распечатать их, чтобы проверить. Если один из них не является целым числом, Integer.parseInt()
бросит это исключение.