Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Commons CSV-不区分大小写的头?_Java_Csv_Apache Commons_Apache Commons Csv - Fatal编程技术网

Java Apache Commons CSV-不区分大小写的头?

Java Apache Commons CSV-不区分大小写的头?,java,csv,apache-commons,apache-commons-csv,Java,Csv,Apache Commons,Apache Commons Csv,在读取csv时,实现中是否有内置功能可以忽略标题大小写 不久前,我们已经实现了将CSV导出文件转换为SQL的实用程序。为此,我们选择了Apache CSV。到目前为止一切都很好,但现在我们有一个改变的要求 我们处理的所有CSV文件都必须包含标题,现在我们应该以不区分大小写的方式读取这些标题,这样我们的用户就不必在其中投入精力,并观察他们创建的CSV是否符合我们的标题大小写要求 代码示例: for (CSVRecord record : subsidiaryRows) { String n

在读取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";
当用户在CSV中使用“name”作为列标题而不是大写为“N”的“name”时,问题显然会出现


我跟踪了API和源代码,但找不到任何东西。有没有办法强制CSVRecord使用CaseInsensitiveMap进行映射或其他类似的操作

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

Map<String, String> nodeMap = 
    new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
映射节点映射=
新的树映射(字符串.不区分大小写的顺序);

我认为您必须方便地处理csv头文件,在您使用
apache commons csv
解析csv文件之前,您可以使用来覆盖第一行(头文件)中的大小写


PS:我认为很难通过其他方式实现这一点,因为它是一个封闭的api(每个类都是最终的,headers映射返回内部headers映射的副本)

此功能作为


承诺修订版1708685。

这确实不错,但对我没有任何帮助。我可以提供几十个不区分大小写的解决方案,但首先我希望在我使用另一个库并开始重写所有解析之前,确保apachecsv中不支持这种解决方案。我确信有一些库支持这一点,而且很简单,但现在我的问题是关于Apache CSV。为什么不使用自定义类扩展该类,并在签名中使用字符串重写get方法,这样您就不必重写任何内容。您的意思是下载commons CSV源代码,并根据需要对其进行修补,而不是使用它作为依赖?我看不出任何其他方式扩展类(我想您指的是CSVRecord,它是Apaches代码的一部分,在内部使用)会有什么帮助。或者我真的不明白你的想法。你能解释一下吗?我的意思是将它用作依赖项,通过extends关键字对其进行扩展,并用override注释get方法或任何方法,然后将新类用作map,当你执行get时,它将调用你的类。哦,是的,我就是这么想的。但不能只在现有库中使用新类。原始类在库中使用,在其类中硬编码。看到了吗?你有没有找到更简单的方法来实现这一点?我也面临着类似的问题。不,我没有。。。Sorry通过或提出更改始终是一个选项。您保存了我的一天。若要使用此功能,请执行以下操作:CSVParser parser=CSVFormat.EXCEL.withHeader().withIgnoreHeaderCase().parse(reader);
//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