当调用nextLine() – 方法时,为什么我不能在Scanner(System.in)中输入字符串?

这个程序实际上如何工作……?

import java.util.Scanner; class string { public static void main(String a[]){ int a; String s; Scanner scan = new Scanner(System.in); System.out.println("enter a no"); a = scan.nextInt(); System.out.println("no is ="+a); System.out.println("enter a string"); s = scan.nextLine(); System.out.println("string is="+s); } } 

输出是:

 enter the no 1234 no is 1234 enter a string string is= //why is it not allowing me to enter a string here? 

.nextInt()获取下一个int ,但不读取新行字符。 这意味着当您要求它读取“下一行”时,您将从第一次开始读取新行字符的结尾。

在获得int以修复此问题后,您可以插入另一个.nextLine() 。 或者(我更喜欢这种方式),以string读取int ,并将其解析为int

这是一个常见的误解,如果您在使用nextInt()之后立即使用相同的Scanner for nextLine(),则会导致混淆。

您可以自行修复光标跳到下一行,也可以为整数使用不同的扫描仪。

选项A:使用2种不同的扫描仪

 import java.util.Scanner; class string { public static void main(String a[]){ int a; String s; Scanner intscan =new Scanner(System.in); System.out.println("enter a no"); a=intscan.nextInt(); System.out.println("no is ="+a); Scanner textscan=new Scanner(System.in); System.out.println("enter a string"); s=textscan.nextLine(); System.out.println("string is="+s); } } 

选项B:跳转到下一行

 class string { public static void main(String a[]){ int a; String s; Scanner scan =new Scanner(System.in); System.out.println("enter a no"); a = scan.nextInt(); System.out.println("no is ="+a); scan.nextLine(); System.out.println("enter a string"); s = scan.nextLine(); System.out.println("string is="+s); } } 

您只需要使用scan.next()来读取String

这是因为在nextInt()完成它的执行之后,当调用nextLine()方法时,它会扫描nextInt()之后存在的换行符。 您可以通过以下任一方式执行此操作:

  1. 您可以在nextInt()之后使用另一个nextLine()方法将扫描程序移过换行符。
  2. 您可以使用不同的Scanner对象来扫描整数和字符串(您可以将它们命名为scan1和scan2)。
  3. 您可以在扫描仪对象上使用下一个方法

    scan.next();

当我们通过scan.nextLine()获取输入字符串时,扫描程序的缓冲区已满 所以它下次跳过输入。 所以解决方案就是我们可以创建一个新的Scanner对象,对象的名称可以和之前的对象一样……

不要尝试使用nextLine()扫描文本; 在使用相同扫描仪的nextInt()之后! 它与Java Scanner不兼容,许多Java开发人员选择仅使用另一个Scanner进行整数。 如果需要,可以将这些扫描仪称为scan1和scan2。

使用临时 scan.nextLine(); 这将消耗\ n字符

如果你不想使用解析器:

 int a; String s; Scanner scan = new Scanner(System.in); System.out.println("enter a no"); a = scan.nextInt(); System.out.println("no is =" + a); scan.nextLine(); // This line you have to add (It consumes the \n character) System.out.println("enter a string"); s = scan.nextLine(); System.out.println("string is=" + s); 

如果您不想使用nextint,您也可以使用缓冲读取器,其中使用inputstreamreadline函数读取字符串。

使用\ n字符的简单解决方案:

 import java.util.Scanner; class string { public static void main(String a[]){ int a; String s; Scanner scan = new Scanner(System.in); System.out.println("enter a no"); a = scan.nextInt(); System.out.println("no is ="+a); scan.nextLine(); System.out.println("enter a string"); s = scan.nextLine(); System.out.println("string is="+s); } } 
 import java.util.*; public class ScannerExample { public static void main(String args[]) { int a; String s; Scanner scan = new Scanner(System.in); System.out.println("enter a no"); a = scan.nextInt(); System.out.println("no is =" + a); System.out.println("enter a string"); s = scan.next(); System.out.println("string is=" + s); } } 
  s=scan.nextLine(); 

它返回输入被跳过。

所以你可以使用

  s=scan.next();