OpenCSV reader 去除结束引号而不是忽略它们

OpenCSV reader strips ending quotes instead of ignoring them

假设我有:

id,description,amount
1,Foo "bar",10.5
2,Quick "brown" fox,9.0

我知道正确的 csv 应该 Foo "bar" 转义为 Foo ""bar"" 以提取引号。但这是我必须处理的数据 -- ,它不是我在处理之前可以修改的东西。

try (CSVReader csvReader = new CSVReaderBuilder(new FileReader(resourcePath))
        .withSkipLines(1)
        .withCSVParser(new CSVParserBuilder().withIgnoreQuotations(true).build())
        .build()) {
    String[] line;
    ..

为了解决这个问题,我尝试让 CSVReader 忽略所有带有 withIgnoreQuotations(true) 的引号,但它似乎去掉了最后一个引号而不是忽略它,所以输出以

结尾
1,Foo "bar,10.5

。有什么方法可以用 OpenCSV 实现以下目标吗?

1,Foo "bar",10.5

您可以使用如下内容:

new CSVParserBuilder().withQuoteChar('§').build();

显然这并不理想,因为您必须选择一个保证永远不会出现在您的数据中的字符。我选择了部分符号 §- 这可能不适合你。

出于兴趣,Apache Commons CSV 解析器没有表现出这种行为:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.8</version>
</dependency>

并且:

String sampleRecord = "1,Foo \"bar\",10.5";
CSVParser parser = CSVParser.parse(sampleRecord, CSVFormat.DEFAULT);
        
for (CSVRecord record : parser) {
    System.out.println(record.get(1));
}

这会打印:

Foo "bar"