如何从控制台应用程序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 } }