scanner.nextLine(); // 消耗掉换行符
这行代码的作用是读取并丢弃输入流中的换行符。这是因为在使用 Scanner
对象读取用户输入时,有时候会在输入流中留下未处理的换行符,这可能会导致后续的输入读取出现问题。
具体来说,当你使用 Scanner
的 nextInt()
或 next()
等方法读取输入时,这些方法会读取并返回输入的整数或单词,但不会消耗掉紧随其后的换行符。这个换行符会被留在输入缓冲区中,如果没有被正确处理,可能会影响后续的输入读取操作。
例如,如果你在读取一个整数后立即尝试读取一个字符串,由于换行符的存在,nextLine()
方法可能会立即读取到这个换行符并认为已经读取了一个完整的行,从而跳过预期的字符串输入。
通过添加 scanner.nextLine();
这行代码,可以确保读取并消耗掉这个换行符,从而避免上述问题。这样,后续的输入读取操作就能正常进行,而不会受到之前留下的换行符的影响。
总结来说,scanner.nextLine(); // 消耗掉换行符
这行代码是为了确保输入流中的换行符被正确处理,避免对后续输入读取操作造成干扰。
下面举例进行说明:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取整数
System.out.print("请输入一个整数: ");
int number = scanner.nextInt();
// 读取字符串
System.out.print("请输入一个字符串: ");
String text = scanner.nextLine();
// 输出结果
System.out.println("你输入的整数是: " + number);
System.out.println("你输入的字符串是: " + text);
scanner.close();
}
}
运行结果:
在这个代码中,如果我们运行程序并输入一个整数和一个字符串,程序会跳过字符串输入的部分,直接输出整数和空字符串。这是因为 nextInt()
方法读取了整数,但没有消耗掉紧随其后的换行符。当 nextLine()
被调用时,它会立即读取到这个换行符并认为已经读取了一个完整的行,因此字符串输入被跳过了。
为了解决这个问题,我们需要在 nextInt()
之后添加 scanner.nextLine();
来消耗掉换行符:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取整数
System.out.print("请输入一个整数: ");
int number = scanner.nextInt();
scanner.nextLine(); // 消耗掉换行符
// 读取字符串
System.out.print("请输入一个字符串: ");
String text = scanner.nextLine();
// 输出结果
System.out.println("你输入的整数是: " + number);
System.out.println("你输入的字符串是: " + text);
scanner.close();
}
}
运行结果:
使用场景和注意事项
- 当需要读取包含空格的字符串时,应该使用
nextLine()
方法。 - 当需要读取单独的非空白字符或数字时,应该使用
next()
方法。 - 在使用
next()
或其他基于next()
的方法(如nextInt()
,nextDouble()
等)后,如果紧接着使用nextLine()
,需要额外调用一次nextLine()
来消费掉由前一个方法留下的换行符,否则nextLine()
将直接读取换行符并返回空字符串。