问题描述
之间有什么区别?
String s2 = scan.nextLine();
和
String s2 = scan.next() + scan.nextLine();
1楼
尝试以下代码片段:
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 ()方法从扫描器中查找并返回下一个完整令牌,即在这种情况下将返回最后的输入值。
2楼
注册。
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()