Как с помощью Scanner считывать строку полностью, с учётом пробелов?

У меня есть такой код:

System.out.print("Input a Dream: ");
String dream_input = input.next();
System.out.print("Input a Status: ");
String s_status_input = input.next();

Он считывает только слово, до первого пробела. Его естественная функция. Но мне надо записать строку слов целиком. Везде предлагается метод использования nextLine(), но есть одно НО: При его использовании, при отображении в консоле вместо первой фразы "

"Input a Dream:"

" отображается сразу всё:

"Input a Dream: Input a Status: "

после чего можно заполнить только одну переменную - s_status_input. Как мне написать так, чтобы я смог ввести две фразы раздельно и каждая записалась в нужную переменную?


Ответы (3 шт):

Автор решения: Roman C

Попробуйте ввести

"Input a Dream:\nInput a Status: "

Это должно сработать, в случае

System.out.print("Input a Dream: ");
String dream_input = input.nextLine();
System.out.print("Input a Status: ");
String s_status_input = input.nextLine();
→ Ссылка
Автор решения: Nordfox

)))

   System.out.print("Input a Dream: \n");
    String dream_input = input.next();
    System.out.print("Input a Status: ");
    String s_status_input = input.next();
→ Ссылка
Автор решения: Tom

Это странно, ваш код рабочий и работает так, как вы и задумывали, причём без nextLine() Попробуйте скомпилировать этот класс:

  import java.io.InputStreamReader;
  import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(new InputStreamReader(System.in));
        System.out.print("Input a Dream: ");
        String dream_input = scanner.next();
        System.out.print("Input a Status: ");
        String s_status_input = scanner.next();
        System.out.println(dream_input);
        System.out.println(s_status_input);
    }
}

Консоль:

Input a Dream: dream
Input a Status: status
dream
stastus

На онлайн компиляторе onlinegdb, о котором вы говорили код тоже правильно работает

→ Ссылка