opencsv读取器去掉结尾引号,而不是忽略它们

u3r8eeie  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(678)

假设我有:

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

我知道你应该 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
8mmmxcuj

8mmmxcuj1#

您可以使用以下内容:

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"

相关问题