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

Java读取CSV时split拆分列报数组越界 如何正确获取各列值

问题排查与解决方法

问题根因

你遇到的报错本质不是split方法的问题,是Scanner的读取方法使用错误:

  • Scanner的next()方法默认以所有空白符(空格、换行符、制表符等)作为分隔边界,调用时只会读取到下一个空白符前的内容。你的时间戳字段包含空格,所以next()只会读到日期部分(2019-05-07)就返回,根本拿不到完整的一行数据,拆分后数组长度自然不符合预期。
  • 你跳过表头的写法也有问题:用next()跳首行只会读取表头第一部分,剩余的表头内容还留在缓冲区,第一次循环读取的还是表头剩余内容,也会触发下标越界。

修正方案

把读取方法换成nextLine()读取完整行即可,修正后的代码如下:

public static void main(String[]args){
    String blah = "file.csv";
    File file = new File(blah);
    try{
        Scanner iterate = new Scanner(file);
        iterate.nextLine(); // 用nextLine跳过完整的表头行
        while(iterate.hasNextLine()){
            String data = iterate.nextLine(); // 读取完整的一行数据
            String[] values = data.split(",");
            // 注意列索引从0开始:timestamp是0,Column1是1,column2是2,column3是3
            String column3Val = values[3].trim(); // 加trim去除列值前后的多余空格
            // 如果需要转Float,确认column3的值是合法数字格式再转
            // Float nbr = Float.parseFloat(column3Val);
            System.out.println(column3Val);
        }
        iterate.close();
    }catch (FileNotFoundException e){
        e.printStackTrace();
    }
}

补充说明

  • 如果你的CSV存在字段内包含逗号、引号等复杂场景,更推荐使用第三方CSV处理库处理,避免手动拆分的边界问题。
  • 下标访问前可以先判断values.length >=4,避免个别行格式异常导致程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:05