Как удаление первого слова из отсканированного строкового предложения работает с классом Scanner?

Назначение:

Напишите программу на Java, которая за один раз считывает предложение как строку и записывает это предложение обратно на экран без первого слова. Например:

Дайте свой приговор: Великий Гонзо

отличный гонзо

Внизу код. Но как класс сканера удаляет первое слово? Я не совсем понимаю. Если бы вы могли дать объяснение или предоставить некоторые ресурсы относительно того, как этот код удаляет первое слово, это было бы здорово. Большое спасибо. Вот код:

    Scanner scan = new Scanner(System.in);
    System.out.print("Geef je zin : ");
    String input = scan.nextLine();  //Input contains entire sentence
    System.out.println("\n" + input);
    scan.close();

    //butfirst
    Scanner scan2 = new Scanner(input);
    String word = scan2.next();
    String rest = scan2.nextLine();
    System.out.println("-> " + rest);
    scan2.close();

    //butsecond
    Scanner scan3 = new Scanner(input);
    word = scan3.next();
    String word2 = scan3.next();
    rest = scan3.nextLine();
    System.out.println("-> " + word + rest);
    scan3.close();

person starmensxd    schedule 30.09.2020    source источник
comment
Вы можете сделать это следующим образом: stackoverflow.com/a/9378447/4207306   -  person Eklavya    schedule 30.09.2020
comment
Показанный код не соответствует заданию, потому что он предлагает прочитать все предложение за один раз, но вместо этого вы читаете первое слово, а затем оставшуюся часть предложения.   -  person Mark Rotteveel    schedule 01.10.2020
comment
Работает как положено. Пример запуска: Geef je zin : The Great Gonzo The Great Gonzo -> Great Gonzo -> The Gonzo В чем проблема?   -  person Arvind Kumar Avinash    schedule 01.10.2020
comment
@ArvindKumarAvinash ОП хочет знать, как работает код   -  person Nosrep    schedule 02.10.2020


Ответы (3)


ну ключ

String word = scan2.next();

он потребляет первое слово, поэтому следующий вызов scan2.nextLine() возвращает все, кроме первого слова. Вывод из scan2.next() (первое слово) фактически бесполезен, нигде не используется, вызывается только для перемещения внутреннего указателя сканера на одно слово.

Однако есть, конечно, гораздо лучшие решения.

person Michal Drozd    schedule 30.09.2020

next() считывает ввод до тех пор, пока не встретит разделитель пробела () (по умолчанию, но я считаю, что его можно изменить)

nextLine() читает ввод до тех пор, пока не встретит новую строку (\n) или «ENTER», и когда ваш ввод прочитан, курсор теперь находится в новой строке

Пример: ввод = Geef je zin; next() = Geef, и курсор будет на j, поэтому вызов nextLine() даст вам je zin, и курсор будет на новой строке

ввод = Geef je zin; nextLine() = Geef je zin читает всю строку

Я не очень хорошо разбираюсь в объяснениях, но на geeksforgeeks есть хорошо написанная статья: www. выродки. org/ разница-между-следующей-и-методами-следующей строки-в-java

person rNewb23    schedule 30.09.2020

scan2.next() перемещает внутренний указатель Сканера вперед на одно слово до первого пробела и возвращает слово. scan2.nextLine() возвращает оставшуюся часть строки и перемещает указатель на следующую строку. В примере | представляет собой указатель:

scan.next():     The|Great Gonzo
                 returns first word

scan.nextLine(): The Great Gonzo
                 |
                 returns the rest of the line starting from the previous pointer position
person Nosrep    schedule 01.10.2020