使用Apache Commons CSV读取CSV文件时跳过双引号


Reader in = new FileReader(dataFile);
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().withIgnoreEmptyLines(true).withTrim().parse(in);
        // Reads the data in csv file until last row is encountered
        for (CSVRecord record : records) {
            String column1= record.get("column1");

在这里,csv 文件中的 column1 值类似于"1234557。因此,当我阅读该列时,它会在开头用引号获取。在Apache commons csv中有什么办法可以跳过这些。

来自csv文件的示例数据:""0996108562","204979956"

无法使用此 MCVE 的commons-csv-1.4.jar重现(最小、完整和可验证的示例):

String input = "column1,column2rn" +
               "1,Foorn" +
               ""2","Bar"rn";
CSVFormat csvFormat = CSVFormat.RFC4180.withFirstRecordAsHeader()
                                       .withIgnoreEmptyLines(true)
                                       .withTrim();
try (CSVParser records = csvFormat.parse(new StringReader(input))) {
    for (CSVRecord record : records) {
        String column1 = record.get("column1");
        String column2 = record.get("column2");
        System.out.println(column1 + ": "+ column2);
    }
}

输出:

1: Foo
2: Bar

"2""Bar"周围的引号已被删除。

如果我正确理解您的要求,您需要使用 Apache 的 StringEscapeUtils 中的 unescapeCsv。正如文档所说:

如果值括在双引号中,并且包含逗号、换行符>>或双引号,则会删除引号。

任何双引号转义

字符(一对双引号)都只能转义为一个双引号。

如果值未括在双引号中,或者不包含逗号、换行符或双引号,则 String 值将保持不变。

相关内容

  • 没有找到相关文章

最新更新