Сканер int и String

У меня есть текстовый файл, который нужно прочитать в программе. Формат содержимого файла такой:

1, Q, 0
1, S, 4
1, E, 3
1, W, 2
1, N, 5
2, Q, 0
2, N, 5
3, Q, 0

Код ниже не работает:

sc = new Scanner(new FileReader("dirFile.txt"));
            while(sc.hasNextLine()){
                sc.useDelimiter(", ");
                int loc = sc.nextInt();
                sc.skip(sc.delimiter());
                String description = sc.next();
                sc.skip(sc.delimiter());
                int locID = sc.nextInt();                   // Line 70
                sc.nextLine();                              // Line 71
                locations.get(loc).addExits(description, locID);
            }

Но если я изменю строку 70 и строку 71 на приведенный ниже код, это сработает:

        String temp = sc.nextLine();
        int locID = Integer.parseInt(temp);

Я предполагаю, что проблема первого кода в том, что сканер читает целое число. Если я позволю сканеру прочитать его как String, а затем проанализировать его на int, все будет в порядке. Но я не уверен, почему не работает первый код. Для меня это не имеет смысла. Кто-нибудь может сказать мне, что не так с первым кодом?

Scanner возвращает токены, разделенные разделителем, поэтому вам не нужно пропускать разделитель. Однако вы не должны использовать Scanner для этого (не подходящий инструмент для этой работы, и он медленный). Используйте BufferedReader для чтения строк и split(", ") для каждой строки.
Andreas 07.05.2018 23:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
64
1

Ответы 1

Ваш текст состоит из , и разделителя новой строки \n. Вы должны их совместить.

Более того, этот параметр должен быть установлен вне цикла while:

sc = new Scanner(new FileReader("dirFile.txt"));
sc.useDelimiter(", |\\n");
while() {
  ///
}

Другие вопросы по теме