Почему я получаю исключение InputMismatchException? - PullRequest
2 голосов
/ 04 апреля 2020

Я создал сканер в java для чтения файла данных о городе. Файл отформатирован так:

Abbotsford,2310,2
Adams,1967,1
Algoma,3167,2

При чтении файла я получаю исключение InputMismatchException при сканировании последнего элемента в каждой строке (этот элемент должен быть целым).

public void fileScanner(File toScan) throws FileNotFoundException {
            Scanner sc = new Scanner(toScan);
            sc.useDelimiter(",");
            System.out.println(sc.next());
            System.out.println(sc.nextInt());
            System.out.println(sc.nextInt());

Есть идеи, почему? Я предполагаю, что это как-то связано с моим использованием разделителя ",".

Ответы [ 2 ]

3 голосов
/ 04 апреля 2020

Вы используете только один разделитель, т.е. ,, но ваш файл содержит \r или \n, поэтому попробуйте использовать несколько разделителей. Кроме того, используйте al oop, чтобы прочитать весь файл: -

Scanner sc = new Scanner(toScan);
        sc.useDelimiter(",|\\r\\n");
        while (sc.hasNext()) {
            System.out.println(sc.next());
            System.out.println(sc.nextInt());
            System.out.println(sc.nextInt());
        }

OUTPUT: -

Abbotsford
2310
2

Adams
1967
1

Algoma
3167
2
1 голос
/ 04 апреля 2020

Используемый разделитель - запятая (,) Система ищет следующую запятую, которая следует только после Adams. Таким образом, ввод для системы выглядит как 2 Adams, который, очевидно, не является Int, а является String и, следовательно, inputMisMatch.

Если вы сделаете ваши данные примерно такими, как показано ниже, ваш код будет работать отлично.

Abbotsford,2310,2,
Adams,1967,1,
Algoma,3167,2,

Также я вижу, что нет l oop для чтения всех данных. Ваш код будет читать только первую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...