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

如何使用firstRecord.size()统计CSV列数?代码失效求助

解决Apache Commons CSV统计列数及二维数组初始化问题

问题分析

你代码里的firstRecord未定义就直接调用size(),这会导致编译或运行错误。另外,由于你启用了withFirstRecordAsHeader(),可以更直接地获取列数,无需依赖数据记录。

正确获取列数的两种方法

  • 方法1:通过CSVParser表头信息获取(推荐)
    开启withFirstRecordAsHeader()后,CSVParser会自动将第一行解析为表头,调用getHeaderNames()可获取所有列名的列表,其长度即为列数:

    CSVParser parser = new CSVParser(
            new FileReader(CSV_IMPORT_PATH), CSVFormat.DEFAULT
            .withFirstRecordAsHeader()
            .withIgnoreHeaderCase()
            .withTrim()
    );
    // 获取列数
    int columnCount = parser.getHeaderNames().size();
    System.out.println("列数:" + columnCount);
    
  • 方法2:从第一条数据记录获取
    若要从实际数据行中获取列数,需先从getRecords()返回的列表中取出第一条记录(此时列表第一条是数据行,表头已被单独解析):

    List<CSVRecord> list = parser.getRecords();
    if (!list.isEmpty()) {
        CSVRecord firstRecord = list.get(0);
        int columnCount = firstRecord.size();
        System.out.println("列数:" + columnCount);
    }
    

结合二维数组的完整示例

获取列数后,即可初始化二维数组存储CSV数据:

CSVParser parser = new CSVParser(
        new FileReader(CSV_IMPORT_PATH), CSVFormat.DEFAULT
        .withFirstRecordAsHeader()
        .withIgnoreHeaderCase()
        .withTrim()
);

List<CSVRecord> records = parser.getRecords();
if (records.isEmpty()) {
    // 处理空文件场景
    return;
}

// 获取列数
int columnCount = parser.getHeaderNames().size();
// 初始化二维数组:行数为记录总数,列数为CSV列数
String[][] csvData = new String[records.size()][columnCount];

// 循环填充数组
for (int i = 0; i < records.size(); i++) {
    CSVRecord record = records.get(i);
    for (int j = 0; j < columnCount; j++) {
        // 通过列索引获取对应值
        csvData[i][j] = record.get(j);
    }
}

// 验证输出
System.out.println("二维数组行数:" + csvData.length);
System.out.println("二维数组列数:" + csvData[0].length);

注意事项

  • 若CSV文件包含空行,getRecords()会返回空的CSVRecord,可在循环时通过record.size() > 0过滤无效行
  • 使用record.get(j)时,需确保索引j不超过columnCount-1,避免数组越界

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:15:35