如何用Apache Commons CSV解析含A1/B2类单元格值的CSV并定义行号?
使用Apache Commons CSV解析含A1/B2类单元格值的CSV文件
嘿,我来帮你搞定这两个关于Apache Commons CSV的问题,都是日常开发里很常见的场景,处理起来一点都不难!
1. 解析以A1/B2作为单元格值的CSV文件
这类带斜杠的单元格值完全不会给解析添乱,只要你的CSV文件格式规范(比如用逗号做分隔符,要是单元格里包含分隔符的话记得用引号包裹),Apache Commons CSV就能直接处理。
给你个实用的代码示例参考:
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.FileReader; import java.io.IOException; public class CSVParserDemo { public static void main(String[] args) throws IOException { // 定义CSV格式,默认用逗号分隔,你也可以根据自己的文件自定义分隔符 CSVFormat format = CSVFormat.DEFAULT.withHeader(); // 要是你的文件有表头就加这个,没有直接去掉 try (CSVParser parser = new CSVParser(new FileReader("your-file.csv"), format)) { for (CSVRecord record : parser) { // 按表头名称取单元格值,比如假设表头是"CellValues" String cellValue = record.get("CellValues"); System.out.println("读取到的单元格值:" + cellValue); // 会输出A1/B2这类内容 } } } }
如果你的CSV没有表头,直接用CSVFormat.DEFAULT就行,然后通过索引取值,比如record.get(0)获取第一列的内容。
2. 解析含B1、B2、C3记录的CSV + 行编号需求
当然可以解析这类文件!而且关于行编号,Apache Commons CSV本身就自带了行号获取的方法,根本不用额外手动设置~
CSVRecord类的getRecordNumber()方法会返回当前记录的行号(默认从1开始计数:如果文件有表头,表头是行号1;要是你用withSkipHeaderRecord()跳过了表头,那数据行就从1开始计数)。
结合自定义表头的示例代码如下:
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.FileReader; import java.io.IOException; public class CSVRowNumberDemo { public static void main(String[] args) throws IOException { // 自定义表头,比如你的列对应A、B、C CSVFormat format = CSVFormat.DEFAULT .withHeader("A", "B", "C") // 设置自定义表头 .withSkipHeaderRecord(); // 原文件有表头就加这个跳过,没有的话直接删掉 try (CSVParser parser = new CSVParser(new FileReader("your-data.csv"), format)) { for (CSVRecord record : parser) { long rowNumber = record.getRecordNumber(); String bColumnValue = record.get("B"); // 获取B列的B1、B2等值 System.out.printf("行号%d,B列内容:%s%n", rowNumber, bColumnValue); } } } }
这样就能轻松把行号和对应的单元格值关联起来,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Ratha
相关产品推荐
相关产品推荐

