1
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"

4

2 回答 2

2

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

String input = "column1,column2\r\n" +
               "1,Foo\r\n" +
               "\"2\",\"Bar\"\r\n";
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"已被删除。

于 2016-06-14T05:46:49.473 回答
0

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

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

任何双引号转义字符(一对双引号)都不会转义为一个双引号。

如果该值未包含在双引号中,或者是且不包含逗号、换行符或双引号,则返回 String 值不变。

于 2016-06-14T05:56:53.020 回答