Как я могу прочитать ввод с консоли с помощью класса Scanner в Java?

Как я мог прочитать ввод с консоли с помощью класса Scanner? Что-то вроде этого:

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

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


person Hock3yPlayer    schedule 08.08.2012    source источник
comment
Хороший пример кода: codeflex.co/java-scanner-example-read-from -консоль   -  person John Detroit    schedule 11.04.2018


Ответы (13)


Простой пример, иллюстрирующий, как работает 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

person Rune Vikestad    schedule 08.08.2012
comment
Скажем, я использую сканер только один раз и не хочу загромождать свой код инициализацией, а затем закрытием сканера - есть ли способ получить ввод от пользователя без создания класса? - person Nearoo; 13.10.2017
comment
Вы можете использовать оператор try with resource в JDK 8, например: попробуйте (Scanner scanner = new Scanner (System.in)) {} - person Rune Vikestad; 16.10.2017

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

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

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

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

    « Пока пользователь не введет данные, операция сканирования может блокироваться в ожидании ввода. « Использовать сканер (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
person Yash    schedule 06.07.2015
comment
Теперь это лучший, более актуальный ответ, чем исходный imo. - person logicOnAbstractions; 26.03.2018
comment
Для получения дополнительной информации см .: BufferedReader, Scanner для чтения данных из локального сетевого файла (ИЛИ). - person Yash; 25.02.2019

Проблема с методом 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();
person Vaibhav Bhalla    schedule 07.03.2018

Есть несколько способов получить ввод от пользователя. В этой программе мы возьмем класс Scanner для выполнения задачи. Этот класс Scanner относится к java.util, поэтому первая строка программы - import java.util.Scanner;, которая позволяет пользователю читать значения различных типов в Java. Строка оператора импорта должна быть в первой строке java-программы, и мы продолжим код.

in.nextInt(); // It just reads the numbers

in.nextLine(); // It get the String which user enters

Для доступа к методам класса Scanner создайте новый объект сканера как «in». Теперь мы используем один из его методов, то есть «следующий». Метод «next» получает строку текста, которую пользователь вводит с клавиатуры.

Здесь я использую in.nextLine();, чтобы получить строку, которую вводит пользователь.

import java.util.Scanner;

class GetInputFromUser {
    public static void main(String args[]) {
        int a;
        float b;
        String s;

        Scanner in = new Scanner(System.in);
        System.out.println("Enter a string");
        s = in.nextLine();
        System.out.println("You entered string " + s);

        System.out.println("Enter an integer");
        a = in.nextInt();
        System.out.println("You entered integer " + a);

        System.out.println("Enter a float");
        b = in.nextFloat();
        System.out.println("You entered float " + b);
    }
}
person Jaimin Patel    schedule 31.12.2015

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

Или попросите пользователя ввести два числа, и вы можете сложить, умножить, вычесть или разделить эти числа и распечатать ответы для пользовательских вводов, как в калькуляторе.

Итак, вам нужен класс Scanner. Вы должны import java.util.Scanner;, а в коде нужно использовать:

Scanner input = new Scanner(System.in);

input - имя переменной.

Scanner input = new Scanner(System.in);

System.out.println("Please enter your name: ");
s = input.next(); // Getting a String value

System.out.println("Please enter your age: ");
i = input.nextInt(); // Getting an integer

System.out.println("Please enter your salary: ");
d = input.nextDouble(); // Getting a double

Посмотрите, чем это отличается: input.next();, i = input.nextInt();, d = input.nextDouble();

Согласно String, int и double варьируются одинаково для остальных. Не забывайте оператор импорта в верхней части кода.

person user3598655    schedule 06.05.2014
comment
На самом деле это правильное объяснение, но было бы лучше, если бы вы добавили к нему еще несколько методов, таких как nextLine (), nextLong () и т. Д. - person subhashis; 01.02.2015
comment
Студенты должны следовать примерам, проверять остальные методы и учиться самостоятельно, это то, что я считаю обучением на собственном опыте. - person user3598655; 29.08.2016

Простой пример:

import java.util.Scanner;

public class Example
{
    public static void main(String[] args)
    {
        int number1, number2, sum;

        Scanner input = new Scanner(System.in);

        System.out.println("Enter First multiple");
        number1 = input.nextInt();

        System.out.println("Enter second multiple");
        number2 = input.nextInt();

        sum = number1 * number2;

        System.out.printf("The product of both number is %d", sum);
    }
}
person Clark    schedule 18.08.2013

Когда пользователь вводит свой username, также проверьте правильность ввода.

java.util.Scanner input = new java.util.Scanner(System.in);
String userName;
final int validLength = 6; // This is the valid length of an user name

System.out.print("Please enter the username: ");
userName = input.nextLine();

while(userName.length() < validLength) {

    // If the user enters less than validLength characters
    // ask for entering again
    System.out.println(
        "\nUsername needs to be " + validLength + " character long");

    System.out.print("\nPlease enter the username again: ");
    userName = input.nextLine();
}

System.out.println("Username is: " + userName);
person Anirban Nag 'tintinmj'    schedule 09.06.2013

  1. Чтобы прочитать ввод:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
    
  2. Чтобы прочитать ввод при вызове метода с некоторыми аргументами / параметрами:

    if (args.length != 2) {
        System.err.println("Utilizare: java Grep <fisier> <cuvant>");
        System.exit(1);
    }
    try {
        grep(args[0], args[1]);
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
    
person MyUserQuestion    schedule 04.04.2015
comment
Вам следует прочитать эту страницу справки о форматировании текста / кода: stackoverflow.com/help/formatting. - person Tom; 04.04.2015
comment
Возможно, вы захотите его перевести (с французского?). - person Peter Mortensen; 21.03.2018

Вот полный класс, который выполняет требуемую операцию:

import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int valid = 6;

        Scanner one = new Scanner(System.in);
        System.out.println("Enter your username: ");
        String s = one.nextLine();

        if (s.length() < valid) {
            System.out.println("Enter a valid username");
            System.out.println(
                "User name must contain " + valid + " characters");
            System.out.println("Enter again: ");
            s = one.nextLine();
        }

        System.out.println("Username accepted: " + s);

        Scanner two = new Scanner(System.in);
        System.out.println("Enter your age: ");
        int a = two.nextInt();
        System.out.println("Age accepted: " + a);

        Scanner three = new Scanner(System.in);
        System.out.println("Enter your sex: ");
        String sex = three.nextLine();
        System.out.println("Sex accepted: " + sex);
    }
}
person Prasenjit Chatterjee    schedule 29.03.2015
comment
Нет причин использовать несколько экземпляров Scanner. - person Radiodef; 05.04.2015

Есть простой способ читать с консоли.

Пожалуйста, найдите приведенный ниже код:

import java.util.Scanner;

    public class ScannerDemo {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);

            // Reading of Integer
            int number = sc.nextInt();

            // Reading of String
            String str = sc.next();
        }
    }

Для получения более подробной информации обратитесь к нижеприведенным документам.

Документ

Теперь поговорим о подробном понимании работы класса Scanner:

public Scanner(InputStream source) {
    this(new InputStreamReader(source), WHITESPACE_PATTERN);
}

Это конструктор для создания экземпляра сканера.

Здесь мы передаем ссылку InputStream, которая представляет собой не что иное, как System.In. Здесь он открывает InputStream канал для ввода с консоли.

public InputStreamReader(InputStream in) {
    super(in);
    try {
        sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## Check lock object
    }
    catch (UnsupportedEncodingException e) {
        // The default encoding should always be available
        throw new Error(e);
    }
}

При передаче System.in этот код откроет сокет для чтения с консоли.

person Hasnain Ali Bohra    schedule 07.07.2017

Вы можете передать этот код:

Scanner obj= new Scanner(System.in);
String s = obj.nextLine();
person Tarik Billa    schedule 27.08.2017
comment
Это не дает новой информации и даже менее полезно, чем существующие ответы, из-за отсутствия объяснений. - person Tom; 12.09.2017
comment
Что вы имеете в виду под потоком этого кода? Вы имеете в виду следовать этому коду? Или что-то другое? - person Peter Mortensen; 21.03.2018

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

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println("String: " + s);
person Yasir Shabbir Choudhary    schedule 07.07.2017

person    schedule
comment
Есть ли какая-то конкретная причина, по которой новый сканер создается каждый раз, или это просто копирование + вставка, не понимая, как это работает? - person Evgeni Sergeev; 22.06.2015
comment
@EvgeniSergeev new Scanner - это объект, который вы создаете для получения пользовательского ввода. подробнее читайте об классе сканера ... - person user3598655; 25.12.2015
comment
обязательно скопируйте наклеенный. Нет необходимости каждый раз в новом сканере (это также не соответствует соглашению об именах переменных java). - person gnomed; 17.02.2017