Scanner.next()和Scanner.nextLine()

时间:2013-11-25 10:15:23

标签: java

我有以下代码:

Scanner in = new Scanner (System.in);
String[] data = new String[5];

System.out.println("Please, enter the name of the customer ordering:");
data[0] = in.next();
System.out.print("Please, enter the assembly details: ");
data[1] = in.nextLine();
System.out.print("Please, enter the assembly id:");
data[2] = in.next();
System.out.println("Please, enter the date the assembly was ordered (MM-DD-YYYY):");
data[3] = in.next();

我试图让nextLine()读取多个单词,但在测试时,它只是跳转到下一个数据扫描[2]。我需要帮助。我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

这应该有效:

    Scanner in = new Scanner (System.in);
    String[] data = new String[5];

    System.out.println("Please, enter the name of the customer ordering:");
    data[0] = in.nextLine();
    System.out.println("Please, enter the assembly details: ");
    data[1] = in.nextLine();
    System.out.println("Please, enter the assembly id:");
    data[2] = in.nextLine();
    System.out.println("Please, enter the date the assembly was ordered (MM-DD-YYYY):");
    data[3] = in.nextLine();
    in.close();

您应该使用nextLine()而不是next()来从控制台读取每一行

答案 1 :(得分:0)

next() - 查找并返回此扫描程序中的下一个完整令牌 nextLine() - 使此扫描器超过当前行并返回跳过的输入。

来自java API文档。

答案 2 :(得分:0)

如果您不知道自己在做什么,请不要同时使用next()nextLine(),否则很容易导致错误。 next()读取下一个输入标记,nextLine()所有标记直到下一行。所以如果你有这样的输入:

  

约翰\ nSquirrels

(\ n是换行符)

第一个next()返回“John”并离开我们

  

\ nSquirrels

之后nextLine()在行结束前没有任何标记,所以你得到一个空字符串而不是“Squirrels”。