Как читать строки из сканера в консоли Приложение 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();)
Ответы
Ответ 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
}
}