Java с помощью сканера введите клавишу нажатой

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

Как это сделать с помощью java. Мне сказали, что это можно сделать с помощью сканера или буферизованного считывателя ввода. Я не понимаю (или знаю, как использовать) буферизованный считыватель ввода.

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

    Scanner readinput = new Scanner(System.in);

    String enterkey = "Hola";
    System.out.print(enterkey);


    enterkey = readinput.nextLine();
     System.out.print(enterkey);

    if(enterkey == ""){

        System.out.println("It works!");

Спасибо

- изменить - следующий код работает с использованием метода equals для строки вместо ==

    Scanner readinput = new Scanner(System.in);

    String enterkey = "Hola";
    System.out.print(enterkey);


    enterkey = readinput.nextLine();
     System.out.print(enterkey);

    if(enterkey.equals("")){

        System.out.println("It works!");

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

Ответ 1

Это работает с помощью java.util.Scanner и будет выполнять несколько "enter" нажатий клавиш:

    Scanner scanner = new Scanner(System.in);
    String readString = scanner.nextLine();
    while(readString!=null) {
        System.out.println(readString);

        if (readString.isEmpty()) {
            System.out.println("Read Enter Key.");
        }

        if (scanner.hasNextLine()) {
            readString = scanner.nextLine();
        } else {
            readString = null;
        }
    }

Чтобы разбить его:

Scanner scanner = new Scanner(System.in);
String readString = scanner.nextLine();

Эти строки инициализируют новый Scanner, который читается из стандартного потока ввода (клавиатура) и считывает из него одну строку.

    while(readString!=null) {
        System.out.println(readString);

Пока сканер по-прежнему возвращает ненулевые данные, напечатайте каждую строку на экране.

        if (readString.isEmpty()) {
            System.out.println("Read Enter Key.");
        }

Если клавиша "enter" (или возврат или что-то другое) подается на вход, метод nextLine() возвращает пустую строку; проверяя, является ли строка пустой, мы можем определить, был ли этот ключ нажат. Здесь напечатан текст Read Enter Key, но вы можете выполнить любое действие, которое вы хотите здесь.

        if (scanner.hasNextLine()) {
            readString = scanner.nextLine();
        } else {
            readString = null;
        }

Наконец, после печати содержимого и/или выполнения чего-либо при нажатии клавиши "enter", мы проверяем, имеет ли сканер другую строку; для стандартного входного потока этот метод будет "блокироваться" до тех пор, пока поток не будет закрыт, выполнение программы не будет завершено или не будет введен дополнительный вход.

Ответ 2

Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        Double d = scan.nextDouble();


        String newStr = "";
        Scanner charScanner = new Scanner( System.in ).useDelimiter( "(\\b|\\B)" ) ;
        while( charScanner.hasNext() ) { 
            String  c = charScanner.next();

            if (c.equalsIgnoreCase("\r")) {
                break;
            }
            else {
                newStr += c;    
            }
        }

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

Этот код отлично работает