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

关于Scanner类in.hasNext()方法:如何让输入结束时返回false

解决Scanner.hasNext()无法终止循环的问题

问题原因

Scanner.hasNext()会持续等待输入,直到检测到输入流的结束标记。在控制台输入场景下,系统不会自动结束输入流,所以方法会一直返回true,导致循环无法终止。

解决方案

1. 控制台手动触发输入流结束

根据操作系统不同,按下对应快捷键发送结束信号:

  • Windows:按下 Ctrl + Z,然后按回车键
  • Linux/macOS:按下 Ctrl + D

2. 通过文件重定向输入

如果需要批量输入内容,可以将输入内容写入文件,运行程序时通过命令行重定向输入流:

java Test < input.txt

当文件内容读取完毕,hasNext()会自动返回false,循环终止。

3. 自定义结束标记

如果不想依赖系统快捷键,可以设定一个自定义的结束字符串(比如exit),在读取到该标记时主动终止循环:

import java.util.ArrayList;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        ArrayList<String> str = new ArrayList<>();
        
        String input;
        while (in.hasNext()) {
            input = in.next();
            // 读取到自定义结束标记时退出循环
            if ("exit".equals(input)) {
                break;
            }
            str.add(input);
        }
        in.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:05:55