You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何用Scanner读取数字和句子 nextInt后nextLine为何失效

问题成因

Scanner类的nextInt()方法的设计逻辑是仅读取输入流中的整数内容,不会处理输入整数后按下回车产生的换行符\n,该换行符会残留在输入缓冲区中。而nextLine()方法的读取规则是从当前指针位置开始,直到遇到第一个换行符为止,返回两个位置之间的内容并跳过该换行符。因此调用完nextInt()后立即调用nextLine()时,方法会直接读取到残留的换行符,返回空字符串,看起来就像跳过了输入步骤。

可行解决方案
  • 方案1:调用nextInt()后主动调用一次nextLine()消费缓冲区残留的换行符
    改动最小,适合输入逻辑固定的场景,修改后代码如下:
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a number: ");
int x = scanner.nextInt();
scanner.nextLine(); // 新增行,用于吃掉残留的换行符
System.out.println("Enter a sentence");
System.out.println(x);
String line = scanner.nextLine();
System.out.println(line);
  • 方案2:所有输入统一使用nextLine()读取,再手动转换为对应数据类型
    从根本上避免了不同读取方法的缓冲区残留问题,稳定性更高,推荐使用,代码示例如下:
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a number: ");
// 先读取整行内容,再手动转换为int类型
int x = Integer.parseInt(scanner.nextLine());
System.out.println("Enter a sentence");
System.out.println(x);
String line = scanner.nextLine();
System.out.println(line);
  • 方案3:如果需要读取的内容不包含空格,可以用next()代替nextLine()
    next()方法会自动忽略开头的空白符,直到遇到下一个空白符停止读取,因此不会受到残留换行符的影响,但无法读取包含空格的完整句子,仅适合无空格内容的读取场景。

内容的提问来源于stack exchange,提问作者user15602150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:45:03