Сканер не читает целое предложение - разница между next() и nextLine() класса сканера

Я пишу программу, которая позволяет пользователю вводить свои данные, а затем выводит ее. Его 3/4 правильно, но когда он приходит к выходу адреса, он только печатает слово, говорящий только "Архиепископ" с "Архиепископской улицы". Как это исправить?

import java.util.*;

class MyStudentDetails{
    public static void main (String args[]){
        Scanner s = new Scanner(System.in);
        System.out.println("Enter Your Name: ");
        String name = s.next();
        System.out.println("Enter Your Age: ");
        int age = s.nextInt();
        System.out.println("Enter Your E-mail: ");
        String email = s.next();
        System.out.println("Enter Your Address: ");
        String address = s.next();

        System.out.println("Name: "+name);
        System.out.println("Age: "+age);
        System.out.println("E-mail: "+email);
        System.out.println("Address: "+address);
    }
}

Ответ 1

Этот подход работает, но я не понимаю, может ли кто-нибудь объяснить, как это работает.

String s = sc.next();
s += sc.nextLine();

Ответ 2

Инициализируйте сканер таким образом, чтобы он ограничивал ввод с использованием нового символа строки.

Scanner sc = new Scanner(System.in).useDelimiter("\\n");

Подробнее о JavaDoc

Используйте sc.next(), чтобы получить всю строку в строке

Ответ 3

Я бы использовал Scanner#nextLine, противоположный next для вашего атрибута address.

Этот метод возвращает остальную часть текущей строки, за исключением любого разделителя строк в конце.

Так как это возвращает всю строку, разделенную разделителем строк, это позволит пользователю вводить любой адрес без каких-либо ограничений.

Ответ 4

Разделитель по умолчанию для Scanner - это пробел. Отметьте javadoc, чтобы изменить это.

Ответ 5

String s="Hi";
String s1="";

//For Reading Line by hasNext() of scanner 
 while(scan.hasNext()){
  s1 = scan.nextLine();
 }
System.out.println(s+s1);

/*This Worked Fine for me for reading Entire Line using Scanner*/

Ответ 6

Вместо прямого использования System.in и System.out используйте класс Console - он позволяет отображать подсказку и читать целую строку (тем самым фиксируя вашу проблему) ввода в один вызов:

String address = System.console().readLine("Enter your Address: ");

Ответ 7

import java.util.Scanner;
public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        double d = scan.nextDouble();
        String s="";
        while(scan.hasNext())
        {
            s=scan.nextLine();
        }

        System.out.println("String: " +s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}

Ответ 8

next() может читать ввод только до пробела. Он не может прочитать два слова через пробел. Кроме того, next() помещает курсор в ту же строку после прочтения ввода.

nextLine() читает ввод, включая пробел между словами (то есть читает до конца строки \n). Как только ввод прочитан, nextLine() курсор в следующую строку.

для чтения всей строки вы можете использовать nextLine()

Ответ 9

Мы можем легко сделать с помощью scan.nextLine. Он будет читать остальную часть ввода до конца. Затем назначьте его переменной. Цельное предложение можно распечатать легко , Вот пример вашего лучшего понимания.

    String s = "HackerRank ";

    Scanner scan = new Scanner(System.in);


    String s2;



    scan.nextLine(); // read the rest of the line of input (newline character after the double token).
    s2 = scan.nextLine();



    /* Concatenate and print the String variables on a new line integer variables on a new line; 

    System.out.println(s + s2);

    scan.close();

} }

Ответ 10

Я пробовал следующий код, но это не останавливается, так как нет условия прерывания, поэтому он всегда ждет ввода, возможно, вы могли бы добавить условие для разрыва

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        double d = scan.nextDouble();
        String s="";
        while(scan.hasNext())
        {
            s=scan.nextLine();
        }

        System.out.println("String: " +s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}

Ответ 11

Чтобы получить весь адрес, добавьте

s.nextLine();//read the rest of the line as input

перед

System.out.println("Enter Your Address: ");
String address = s.next();

Ответ 12

Вы должны попробовать этот код:

scan.nextLine();
String address = s.nextLine();

Это полностью работает.

Ответ 13

Я установил разделитель токенов как шаблон новой строки, прочитал следующий токен, а затем вернул разделитель к тому, что было.

public static String readLine(Scanner scanner) {
        Pattern oldDelimiter = scanner.delimiter();
        scanner.useDelimiter("\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029]");
        String r = scanner.next();
        scanner.useDelimiter(oldDelimiter);
        return r;
}

Ответ 14

Ниже приведен пример кода для чтения строки в стандартном входе с использованием класса Java Scanner.

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        System.out.println(s);
        scan.close();
    }
}

Input:

Hello World

Вывод:

Hello World

Ответ 15

"он только печатает слово, говорящий только" Архиепископ "с" Архиепископской улицы "

Он печатает только слово, потому что функции сканера, такие как next(), nextInt() и т.д., читают только токены во времени. Таким образом, эта функция читает и возвращает следующий токен.

For example if you have: x y z
 s.next() will return x
 s.nextLine() y z

Возвращаясь к вашему коду, если вы хотите прочитать всю строку "Архиепископская улица"

String address = s.next(); // s = "Archbishop"
Then address += s.nextLine(); // s = s + " Street"

Ответ 16

ниже фрагмент кода должен делать то, что ищет yoiu:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    String s = scan.nextLine();
    System.out.println(s);
    scan.close();
}

Ответ 17

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.next();
        s += scan.nextLine();
        System.out.println("String: " + s);

    }
}

Ответ 18

java.util.Scanner; util - упаковка, сканер - класс

  1. next() читает строку перед пробелом. он не может ничего читать после того, как получает первый пробел.
  2. nextLine() читает всю строку. Читайте до конца строки или "/n". Примечание: не следующая строка

(Пример)

Моя жизненная миссия - не просто выжить, но и процветать;

и делать это с некоторой страстью, некоторым состраданием, некоторым юмором.

(Выход)

  1. мой

  2. Моя жизненная миссия - не просто выжить, но и процветать;

Трюки:

Если вы хотите прочитать следующую строку, проверьте, has Java метод.

while (scanner.hasNext()) {
    scan.next();
}

while (scanner.hasNext()) {
    scan.nextLine();
}

Ответ 19

У меня был тот же вопрос. Это должно сработать для вас:

s.nextLine();

Ответ 20

Вы также можете использовать

String address = s.nextLine();
address = s.nextLine();

Ответ 21

Используйте nextLine() вместо next() для принятия предложения в качестве строкового ввода.

Scanner sc = new Scanner(System.in);
String s = sc.nextLine();

Ответ 22

Вы можете сделать это:

class MyStudentDetails{
    public static void main (String args[]){
         Scanner s = new Scanner(System.in);
         System.out.println("Enter Your Name: ");
         String name = s.nextLine();
         System.out.println("Enter Your Age: ");
         String age = s.nextLine();
         System.out.println("Enter Your E-mail: ");
         String email = s.nextLine();
         System.out.println("Enter Your Address: ");
         String address = s.nextLine();


         System.out.println("Name: "+name);
         System.out.println("Age: "+age);
         System.out.println("E-mail: "+email);
         System.out.println("Address: "+address);

    }
}