我需要处理具有重复标题的CSV文件,每个数据分为三列(min,max和avg),但每列的标题相同.第一列是min,第二列是average,第三列是max.
Apache CSV解析器抛出:
java.lang.IllegalArgumentException: The header contains a duplicate name:
如何配置解析器以接受重复的标头?
没有预定义的配置参数CSVParser
控制是否可以接受重复的列名称.
查看源代码显示该initializeHeader
方法创建一个Map
将列名作为键,列索引作为值.如果要使用标头映射,则列名必须是唯一的.
但是,有一个解决方案:
指定CSVFormat
忽略CSV文件第一行中定义的列名称,并手动定义列名称.
从CSVFormat
文档:
定义列名称
要定义要用于访问记录的列名,请写入:
CSVFormat.EXCEL.withHeader("Col1", "Col2", "Col3");调用
withHeader(String...)
let让您使用给定的名称来寻址a中的值CSVRecord
,并假设您的CSV源不包含也定义列名的第一个记录.如果确实如此,那么你将覆盖你的名字该元数据,你应该通过调用跳过第一个记录withSkipHeaderRecord(boolean)
用true
.