Как читать строки из сканера в консоли Приложение JAVA? - программирование

Как читать строки из сканера в консоли Приложение JAVA?

import java.util.Scanner;
class MyClass
{
     public static void main(String args[]){

                Scanner scanner = new Scanner(System.in);
                int eid,sid;
                String ename;
                System.out.println("Enter Employeeid:");
                     eid=(scanner.nextInt());
                System.out.println("Enter EmployeeName:");
                     ename=(scanner.next());
                System.out.println("Enter SupervisiorId:");
                      sid=(scanner.nextInt());  
        }
}

Я получил вывод, пытаясь вставить этот

Enter Employeeid:
101
Enter EmployeeName:
firstname lastname
Enter SupervisiorId:
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at com.controller.Menu.<init>(Menu.java:61)
    at com.tests.Employeetest.main(Employeetest.java:17)

но его работа над этим

Enter Employeeid:
105
Enter EmployeeName:
name
Enter SupervisiorId:
501

Что я хочу, так это то, что я должен прочитать полную строку, если она задана как name или как firstname lastname.. Например: - (john → принимается сканером .next(), но john carter не принимается сканером .next();)

4b9b3361

Ответ 1

import java.util.Scanner;

class MyClass
{
     public static void main(String args[]){

                Scanner scanner = new Scanner(System.in);
                int eid,sid;
                String ename;
                System.out.println("Enter Employeeid:");
                eid=scanner.nextInt();
                scanner.nextLine(); //This is needed to pick up the new line
                System.out.println("Enter EmployeeName:");
                ename=scanner.nextLine();
                System.out.println("Enter SupervisiorId:");
                sid=(scanner.nextInt());  
        }
}

Вызов nextInt() был проблемой, так как он не поднимал новую строку (когда вы нажимаете enter). Таким образом, вызов scanner.nextLine() после этого выполняет работу.

Ответ 2

Что вы можете сделать, так это использовать delimeter в качестве новой строки. Пока вы не нажмете клавишу ввода, вы сможете прочитать ее как строку.

Scanner sc = new Scanner(System.in);
sc.useDelimiter(System.getProperty("line.separator"));

Надеюсь, это поможет.

Ответ 3

Заменить:

System.out.println("Enter EmployeeName:");
                 ename=(scanner.next());

с:

System.out.println("Enter EmployeeName:");
                 ename=(scanner.nextLine());

Это потому, что next() захватывает только следующий токен, а пробел выступает в качестве разделителя между токенами. Под этим я подразумеваю, что сканер считывает ввод: "имя первого имени" как два отдельных токена. Итак, в вашем примере, ename будет установлено в firstname, а сканер пытается установить супервизор в lastname

Ответ 4

Вы вводите нулевое значение nextInt, оно не будет выполнено, если вы дадите нулевое значение...

Я добавил нулевую проверку фрагмента кода

Попробуйте этот код:

import java.util.Scanner;
class MyClass
{
     public static void main(String args[]){

                Scanner scanner = new Scanner(System.in);
                int eid,sid;
                String ename;
                System.out.println("Enter Employeeid:");
                     eid=(scanner.nextInt());
                System.out.println("Enter EmployeeName:");
                     ename=(scanner.next());
                System.out.println("Enter SupervisiorId:");
                    if(scanner.nextLine()!=null&&scanner.nextLine()!=""){//null check
                     sid=scanner.nextInt();
                     }//null check
        }
}