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

Java使用Scanner.next()出现NoSuchElementException异常问题咨询

异常原因

你在单次循环中调用了两次scanner.next()方法:第一次是if判断时读取一个分词,第二次是打印时又读取了下一个分词,这会带来两个问题:

  • 每次循环会跳过一个分词,比如测试用例里第一个Hello被if判断时读取消耗了,打印时只会输出第二个World
  • 当总分词数为奇数时,最后一次循环的if判断已经读取了最后一个分词,后续打印调用next()时没有可用元素,直接抛出NoSuchElementException

注释if语句后单次循环只调用一次next(),所有分词可以被正常读取,所以运行正常。

修复方案

单次循环只调用一次next(),将读取到的分词存入临时变量后再做判断和打印逻辑即可,修复后代码如下:

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        String s = "Hello World K";
        Scanner scanner = new Scanner(s);
        while (scanner.hasNext()) {
            // 单次循环只读取一次分词
            String current = scanner.next();
            // 判断是否是终止字符
            if(current.equalsIgnoreCase("q")){
                break;
            }
            // 非终止字符直接打印
            System.out.println(current);
        }
        scanner.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:06