当前位置: 代码迷 >> java >> 为什么用scan.next()+ scan.nextLine()而不是scan.nextLine()
  详细解决方案

为什么用scan.next()+ scan.nextLine()而不是scan.nextLine()

热度:130   发布时间:2023-07-31 11:56:53.0

之间有什么区别?

String s2 = scan.nextLine(); 

String s2 = scan.next() + scan.nextLine(); 

尝试以下代码片段:

    Scanner scanner = new Scanner(System.in);
    String s = scanner.nextLine();
    String s2 = scanner.next()+ scanner.nextLine();

    System.out.println("scanner.nextLine(): "+ s); 
    System.out.println("scanner.next()+ scanner.nextLine(): " + s2); 

输入+输出:

//Input
hello <enter pressed here>
world <enter pressed here>
//Output
scanner.nextLine(): hello
scanner.next()+ scanner.nextLine(): world

nextLine()方法使用缓冲的输入来读取用户输入的字符串。 缓冲输入意味着允许用户退格并更改String直到用户按下Enter键-在这种情况下,这将返回第一个输入的数字。next ()方法从扫描器中查找并返回下一个完整令牌,即在这种情况下将返回最后的输入值。

注册。

next() -查找并返回此扫描仪的下一个完整令牌。

nextLine() -将此扫描程序前进到当前行之外,并返回跳过的输入。

因此,使用next()基本上,它仅读取第一个单词,仅使用第一个标记(字符串)(剩余的内容存储在缓冲区中,但是nextLine()允许您读取直到按下enter =整行。

如果您尝试按照以下代码片段并尝试将单词和句子组合在一起,则可以看到差异:

Scanner sc = new Scanner(System.in);
System.out.println("first input:");
String tmp = sc.next();
System.out.println("tmp: '" + tmp +"'");
System.out.println("second input:");
tmp = sc.next() + sc.nextLine();
System.out.println("2nd tmp: '" + tmp +"'");
}

输入和输出:

first input:
firstWord
tmp: 'firstWord'
second input:
second sentence
2nd tmp: 'second sentence'
//-------------
first input:
first sentencemorewords
tmp: 'first'
second input:
2nd tmp: 'sentencemorewords'

也许更好的解释来自直接打印:

Scanner sc = new Scanner(System.in);
System.out.println("first input:");
String tmp = sc.next();
System.out.println("tmp: '" + tmp +"'");
System.out.println("second input:");
System.out.println("next: " + sc.next() +",... nextLine: " + sc.nextLine());

请注意,只有第一个单词由第一个sc.next()处理,如果有更多单词,则其他任何单词将由第二个sc.next()处理,但如果有两个以上的单词,其余字符串将由nextLine处理

first input:
first second third more words
tmp: 'first'
second input:
next: second,... nextLine:  third more words

因此,在您的程序中, 如果只需要一个单词,请使用sc.next() ;如果您需要阅读整行,请使用nextLine()

  相关解决方案