我需要处理具有重复标题的CSV文件,每个数据位于三列(最小值,最大值和平均值)中,但每一列的标题均相同。第一列是最小值,第二列是平均值,第三列是最大值。
Apache CSV解析器抛出:
java.lang.IllegalArgumentException: The header contains a duplicate name:
如何配置解析器以接受重复的标头?
没有预定义的配置参数,CSVParser
该参数控制重复的列名是否可接受。
查看源代码可以看到,该initializeHeader
方法创建了一个Map
,它将以列名作为键,并以列索引作为值。如果要使用标题映射,则列名必须是唯一的。
但是,有一个解决方案:
指定一个CSVFormat
可忽略在CSV文件第一行中定义的列名的,然后手动定义您的列名。
定义列名
要定义要用于访问记录的列名,请输入:
CSVFormat.EXCEL.withHeader("Col1", "Col2", "Col3");
通过调用,
withHeader(String...)
您可以使用给定名称来寻址中的值CSVRecord
,并假定您的CSV源不包含也定义列名称的第一条记录。如果确实如此,那么你将覆盖你的名字该元数据,你应该通过调用跳过第一个记录withSkipHeaderRecord(boolean)
用true
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句