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

时间:2012-09-04 14:05:54

标签: java user-input java.util.scanner

这个程序实际上如何运作......?

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?

13 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:5)

这是一种常见的误解,如果您在使用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);
    }
}

答案 2 :(得分:2)

您只需使用scan.next()即可阅读String

答案 3 :(得分:2)

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

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

    scan.next();

答案 4 :(得分:1)

当我们通过scan.nextLine()获取输入字符串时,

扫描程序的缓冲区已满 所以它下次跳过输入。 所以解决方案是我们可以创建一个新的Scanner对象,对象的名称可以是相同的 作为前一个对象......

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

如果您不想使用解析器:

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);

答案 8 :(得分:0)

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

答案 9 :(得分:0)

使用\ 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);
    }
}

答案 10 :(得分:0)

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);
    }
}

答案 11 :(得分:0)

如果在它之后声明 .nextInt()

.nextLine() 将不会读取“下一行”直到最后。 我建议尝试在 'int' 之前扫描 'String'

s = scan.nextLine();
a = scan.nextInt();

按照这个顺序。

答案 12 :(得分:-1)

 s=scan.nextLine();

它返回输入被跳过。

所以你可以使用

 s=scan.next();