Apache CSV实现中是否有内置功能在读取csv时忽略标题大小写?
前段时间我们已经实现了将CSV导出文件转换为SQL的实用程序。为此,我们选择了Apache CSV。到目前为止,一切都很好,但现在我们已经收到了变更请求。
我们处理的所有CSV文件都必须包含标题,现在我们应该以不区分大小写的方式阅读这些标题,因此我们的用户不必付出努力,并观察他们创建的CSV是否遵循我们的标题案例要求。
代码示例:
for (CSVRecord record : subsidiaryRows) {
String name = record.get(Data.NAME));
其中Data.NAME是
public static final String NAME = "Name";
当用户使用" name"作为他的CSV中的列标题而不是"名称"资本" N"。
我已经关注了API和源代码,但无法找到任何内容。有没有办法如何强制CSVRecord使用CaseInsensitiveMap进行映射或类似的东西?
答案 0 :(得分:5)
此功能已作为CSV-159
添加到Apache Commons CSV 1.3中承诺修订1708685。
答案 1 :(得分:0)
我认为您必须在使用apache-commons-csv
解析CSV文件之前处理csv标头,您可以使用RandomAccessFile覆盖第一行中的案例(标题)
//convert headers to my 'known' format (ie: lowercase)
RandomAccessFile raf = new RandomAccessFile("C:\\test.csv", "rw");
String firstLine = raf.readLine();
raf.seek(0);
raf.writeBytes(firstLine.toLowerCase());
//your normal process to parse CSV with commons csv
PS:我认为很难以其他方式实现这一点,因为它是一个封闭的api(每个类都是final,而header mapping返回内部头部映射的副本)
答案 2 :(得分:-1)
我没有使用过Apache CSV,但提供以下帮助
Map<String, String> nodeMap =
new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);