Чтение из файла CSV ошибки / проблемы разбора - PullRequest
0 голосов
/ 24 марта 2020

Здравствуйте. У меня проблемы с чтением из CSV-файла, который содержит 3 столбца в строке. Кажется, я не могу разобрать последнюю ячейку (3) в целое число, даже если она всегда является строкой, пригодной для синтаксического анализа: Берлин, Буэнос-Айрес, 7402 Я не могу получить 7402, все броски компилятора:

"в java .base / java .lang.NumberFormatException.forInputString (NumberFormatException. java: 68) в java .base / java .lang.Integer.parseInt (Integer. java: 658) в java .base / java .lang.Integer.parseInt (целое число. java: 776)

У меня есть код:

Scanner scan = new Scanner("worldcities.csv");
        scan.useDelimiter("[,\\n]"); // get everything before a comma or a newline
        while(scan.hasNext()) { // while this file has something then we
            edge.v1 = scan.next(); // take vertice1 ----> city 1
            edge.v2 = scan.next(); //take vertice2 ----> city 2
            edge.e = Integer.parseInt(scan.next()); // parse the third value as int(distance between city1 and city2)
            minheap.add(edge);
        }
        scan.close();

I похоже, что в отладчике можно получить первые 2 значения в порядке.

консоль просто показывает "

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете перебирать строки файла с помощью метода nextLine(), как в этом примере:

Scanner scanner = new Scanner(new File("worldcities.csv"));
while (scanner.hasNextLine()) {
    String columns[] = scanner.nextLine().split(",");
    edge.v1 = columns[0]; // take vertice1 ----> city 1
    edge.v2 = columns[1]; //take vertice2 ----> city 2
    edge.e = Integer.parseInt(columns[2]); // parse the third value as int(distance between city1 and city2)
    minheap.add(edge);
}
scanner.close();

или с использованием класса Files без Scanner:

List<String> rows = Files.readAllLines(Paths.get("worldcities.csv"));
for (String row : rows) {
    String columns[] = row.split(",");
    edge.v1 = columns[0]; // take vertice1 ----> city 1
    edge.v2 = columns[1]; //take vertice2 ----> city 2
    edge.e = Integer.parseInt(columns[2]); // parse the third value as int(distance between city1 and city2)
    minheap.add(edge);
}

Также вы можете использовать специальную библиотеку для работы с файлами CVS, например, посмотрите Apache Библиотека Commons CSV .

...