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

如何在Apache Commons CSV解析记录时跳过#标记的注释行

问题根因

CSVFormat是不可变类,所有配置修改操作只会返回全新的配置实例,不会修改原有对象。你调用setCommentMarker后没有接收返回的新实例,原有csvFormat仍然是默认配置,因此注释标记不生效。

修正后代码

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.Reader;

Reader reader = Files.newBufferedReader(Paths.get(filename), StandardCharsets.UTF_16LE);
// 链式调用配置后build得到生效的配置实例
CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
        .setCommentMarker('#')
        // 其他配置(如设置表头、忽略空行等)可在此处追加
        .build();
Iterable<CSVRecord> records = csvFormat.parse(reader);
char marker = csvFormat.getCommentMarker(); // 可正确返回'#'
for (CSVRecord record : records) {
    if (record.isSet(SHEET_COLUMN_1)) {
        // TODO
    }
}

注意事项

  • 所有CSVFormat的配置修改都需要接收返回的新实例,不要在原有实例上调用配置方法后不赋值
  • 若有其他配置需求,都可以在builder链式调用中统一添加,最后一次性build生成最终配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:04