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

Scanner.hasNextLine始终返回true问题求助:标准输入读取无法终止

解决Scanner.hasNextLine()无限循环的问题

首先,咱们先搞清楚为什么你的程序一直卡在循环里——scanner.hasNextLine()会一直等待新的输入,直到系统收到「文件结束符(EOF)」。在控制台手动输入内容时,程序不知道你已经输入完了,它还在等你继续敲内容呢!

怎么让程序结束循环?

不同操作系统发送EOF的方式不一样:

  • Windows系统:输入完所有内容后,按下 Ctrl + Z,然后按回车
  • Linux/macOS系统:输入完所有内容后,按下 Ctrl + D

顺便修复代码里的小问题

你的代码还有两个细节漏洞:一是每次拼接行号和内容后没加换行符,最后输出的所有内容会挤在一行;二是行号没有自增,所有行都会显示成第1行。给你调整后的完整代码:

import java.util.Scanner;

public class Main { // 补充缺失的类定义,Java程序必须用类包裹main方法
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        int countLines = 1;
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            sb.append(countLines).append(" ").append(line).append("\n"); // 添加换行符,保证每行独立显示
            countLines++; // 行号自增,正确计数每一行
        }
        System.out.println("finish");
        System.out.println(sb.toString());
        scanner.close();
    }
}

测试效果

比如你输入:

Hello world
I am a file
Read me until end-of-file

然后按下对应系统的EOF键,程序就会输出:

finish
1 Hello world
2 I am a file
3 Read me until end-of-file

这样就完美解决你的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:27:36