如何从控制台应用程序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.(Menu.java:61) at com.tests.Employeetest.main(Employeetest.java:17)
但它正致力于此
Enter Employeeid: 105 Enter EmployeeName: name Enter SupervisiorId: 501
我想要的是我必须读取完整的字符串,无论是作为name
还是firstname lastname
.Eg :-( john
– >被scanner.next()接受;但是扫描仪不接受john carter
。 ();)
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()可以完成工作。
你可以做的是使用deimeter作为新行。 直到您按回车键,您将能够将其作为字符串读取。
Scanner sc = new Scanner(System.in); sc.useDelimiter(System.getProperty("line.separator"));
希望这可以帮助。
更换:
System.out.println("Enter EmployeeName:"); ename=(scanner.next());
有:
System.out.println("Enter EmployeeName:"); ename=(scanner.nextLine());
这是因为next()只抓取下一个标记,并且空格充当标记之间的分隔符。 通过这个,我的意思是扫描程序读取输入:“firstname lastname”作为两个单独的标记。 因此,在您的示例中,ename将设置为firstname,扫描程序正在尝试将supervisorId设置为lastname
您正在为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 } }