apache commons csv-不区分大小写的头?

1tu0hz3e  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(409)

在apachecsv实现中是否有一个内置的特性,可以在读取csv时忽略头的大小写?
不久前,我们已经实现了将csv导出文件转换为sql的实用程序。为此,我们选择了apachecsv。到目前为止一切都很好,但现在我们有一个改变的要求。
我们处理的所有csv文件都必须包含头文件,现在我们应该以不区分大小写的方式读取这些头文件,这样我们的用户就不必在其中投入精力,观察他们创建的csv是否符合我们的头文件大小写要求。
代码示例:

for (CSVRecord record : subsidiaryRows) {
    String name = record.get(Data.NAME));

其中data.name

public static final String NAME = "Name";

当用户在csv中使用“name”作为列标题,而不是使用大写“n”的“name”时,问题就显而易见了。
我跟踪了api和源代码,但找不到任何东西。有没有办法强迫csvrecord使用caseinsensitivemap进行Map或其他类似的操作?

ycggw6v2

ycggw6v21#

此功能作为csv-159添加到apachecommons csv1.3中
已提交修订版1708685。

cvxl0en2

cvxl0en22#

我认为你必须处理csv头你的方便,在你解析csv文件之前 apache-commons-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(每个类都是最终的,headersMap返回一个内部headersMap的副本)

u4vypkhs

u4vypkhs3#

我没有使用apachecsv,但是下面的内容有帮助吗

Map<String, String> nodeMap = 
    new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);

相关问题