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

使用Scanner读取分号分隔CSV跳过首数字时出现NoSuchElementException如何解决

问题原因

你的代码存在三处核心错误,共同触发了NoSuchElementException异常:

  • 外层Scanner默认使用空白字符作为分隔符,调用next()无法读取完整行,传入解析方法的内容本身不符合预期
  • 解析方法中配置的分隔符为逗号,与你实际使用的分号分隔格式完全不匹配
  • 没有做行首第一个数字字段的跳过逻辑,字段读取顺序和数量都不符合你给出的CSV格式

修复代码

public static void main(String[] args) throws IOException {
    Path path = Paths.get("src/main/resources/city.csv");
    Scanner scanner = new Scanner(path);
    // 按行读取完整内容
    while (scanner.hasNextLine()) {
        City city = parseInfo(scanner.nextLine());
        System.out.println(city);
    }
    scanner.close();
}

private static City parseInfo(String line) {
    Scanner scanner = new Scanner(line);
    // 改为分号作为分隔符,兼容分号前后可能的空格
    scanner.useDelimiter("\\s*;\\s*");
    // 跳过行首第一个序号字段
    scanner.next();
    String name = scanner.next();
    String region = scanner.next();
    String district = scanner.next();
    int population = scanner.nextInt();
    int foundation = scanner.nextInt();
    scanner.close();
    return new City(name, region, district, population, foundation);
}

额外优化建议

如果要进一步提升鲁棒性,可以在读取每个字段前先调用hasNext()/hasNextInt()做校验,避免异常行导致整个程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 12:24:05