hiwa doski Ответов: 1

Почему я получаю ошибку при попытке получить доступ к int из сканера методом getint ()?


данные записываются в файл, как это
Цитата:
П1,19
Р2,25


код, который я пытался получить доступ к возрасту, таков

try (Scanner scanner = new Scanner((new FileReader("names-with re.txt")))) {
           scanner.useDelimiter(",");
           while (scanner.hasNextLine()) {
               String s = scanner.next();
               scanner.skip(scanner.delimiter());
               int num = scanner.nextInt();
           }
       }



но я получаю `InputMismatchException` со строкой `int num = scanner.nextInt();`
но почему это так? когда я читаю первую строку до `,` и помещаю ее внутрь строки `s`, а затем пропускаю разделитель, разве следующее значение не является int?

Что я уже пробовал:

я попробовал как-то обойти его, но ничего не вышло.

1 Ответов

Рейтинг:
4

OriginalGriff

Потому что вы специально говорите, что ваши данные разделены исключительно запятыми, а это не так. Данные, которые вы показываете, имеют два разделителя: запятую и новую строку.
Попробовать это:

import java.util.*;

public class Main
    {
    public static void main (String[]args)
        {
        System.out.println ("Hello World");
        Scanner scanner = new Scanner ("P1,19\nP2,25");
        scanner.useDelimiter (",|\\n");
        while (scanner.hasNextLine ())
            {
            String s = scanner.next ();
            scanner.skip (scanner.delimiter ());
            int num = scanner.nextInt ();
            System.out.println (s);
            System.out.println (num);
            }
        }
    }


hiwa doski

ваш код работал и печатал их, но в конце концов я все равно получаю исключение !
я написал ваш код вот так

try (Scanner scanner = new Scanner((new FileReader("names-with re.txt")))) {
            scanner.useDelimiter(",|\\n");
            while (scanner.hasNextLine()) {
                String s = scanner.next();
                scanner.skip(scanner.delimiter());
                int age = scanner.nextInt();
                System.out.println(s);
                System.out.println(age);
            }
        }

и я все еще получаю NoSuchElementException со строкой `String s = scanner.next();', почему это так ?

OriginalGriff

Ну, посмотрите на свои данные и узнайте! У меня нет к нему доступа...

hiwa doski

мои данные точно такие же как я уже упоминал это текстовый файл содержащий
П1,19
Р2,25

Dave Kreskowiak

Есть ли пустая строка с только новой строкой в качестве последней строки в файле? Я был бы готов поставить на "да".

Это будет означать, что ваш файл выглядит следующим образом:

P1,19\nP2,25\n\n

hiwa doski

да, я думаю, что это так, потому что есть строка номер 3, которая показывает в моей IDE, которая пуста, слава Вам за то, что вы это выяснили, и спасибо за вашу помощь, но последний вопрос, что я могу сделать с этим, чтобы он не бросал исключение, я уже поставил '\n' в разделитель, так что еще можно с этим поделать ?

Dave Kreskowiak

Проверьте длину строки, прежде чем обрабатывать ее? Это больше, чем 0?

Мне это кажется довольно очевидным.

hiwa doski

ладно, спасибо.