Вопрос-ответ

How can I read input from the console using the Scanner class in Java?

Как я могу прочитать входные данные из консоли, используя класс Scanner в Java?

Как я могу прочитать входные данные из консоли, используя Scanner класс? Что-то вроде этого:

System.out.println("Enter your username: ");
Scanner = input(); // Or something like this, I don't know the code

В принципе, все, что я хочу, это чтобы сканер прочитал входные данные для имени пользователя и присвоил входные данные String переменной.

Переведено автоматически
Ответ 1

Простым примером, иллюстрирующим, как java.util.Scanner работает, было бы чтение одного целого числа из System.in. Это действительно довольно просто.

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

Для получения имени пользователя я бы, вероятно, использовал sc.nextLine().

System.out.println("Enter your username: ");
Scanner scanner = new Scanner(System.in);
String username = scanner.nextLine();
System.out.println("Your username is " + username);

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

Вы найдете больше информации об их реализации в документации API для java.util.Scanner

Ответ 2
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();
Ответ 3

Чтение данных из консоли


  • BufferedReader синхронизирован, поэтому операции чтения в BufferedReader можно безопасно выполнять из нескольких потоков. Можно указать размер буфера или использовать размер по умолчанию (8192). Значение по умолчанию достаточно велико для большинства целей.


    readLine() « просто считывает данные построчно из потока или источника. Считается, что строка завершается любым из этих: \n, \r (или) \ r \n


  • Scanner разбивает входные данные на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу (\s) и распознается Character.isWhitespace.


    « Пока пользователь не введет данные, операция сканирования может блокироваться в ожидании ввода.
    « Используйте Scanner(BUFFER_SIZE = 1024), если вы хотите проанализировать определенный тип токена из потока.
    « Сканер, однако, не является потокобезопасным. Он должен быть синхронизирован извне.


    next() « Находит и возвращает следующий завершенный токен из этого сканера. nextInt() « Сканирует следующий токен входных данных как int .


Код

String name = null;
int number;

java.io.BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
name = in.readLine(); // If the user has not entered anything, assume the default value.
number = Integer.parseInt(in.readLine()); // It reads only String,and we need to parse it.
System.out.println("Name " + name + "\t number " + number);

java.util.Scanner sc = new Scanner(System.in).useDelimiter("\\s");
name = sc.next(); // It will not leave until the user enters data.
number = sc.nextInt(); // We can read specific data.
System.out.println("Name " + name + "\t number " + number);

// The Console class is not working in the IDE as expected.
java.io.Console cnsl = System.console();
if (cnsl != null) {
// Read a line from the user input. The cursor blinks after the specified input.
name = cnsl.readLine("Name: ");
System.out.println("Name entered: " + name);
}

Входные данные и выходные данные Stream

Reader Input:     Output:
Yash 777 Line1 = Yash 777
7 Line1 = 7

Scanner Input: Output:
Yash 777 token1 = Yash
token2 = 777
Ответ 4

Проблема с методом input.nextInt() - он считывает только значение int.

Итак, при чтении следующей строки с помощью input.nextLine() вы получаете "\n", то есть Enter ключ. Итак, чтобы пропустить это, вам нужно добавить input.nextLine() .

Попробуйте вот так:

 System.out.print("Insert a number: ");
int number = input.nextInt();
input.nextLine(); // This line you have to add (it consumes the \n character)
System.out.print("Text1: ");
String text1 = input.nextLine();
System.out.print("Text2: ");
String text2 = input.nextLine();
java