样本数据-
Header1, full_name, header3, header4
- 20, "bob, XXX", "test", 30
- 20, "evan"s,YYY ", "test", 30
-
20, "Tom, ZZZ", "test", 30
CSVReader csvReader = new CSVReader(reader, ',', '"');
第二行读取不符合预期。因为在full_name列值中有双引号
我想忽略这种情况。任何建议都将不胜感激。
使用openCSV java api进行解析。
编辑:我正在从数据库中获取数据。其中一个数据库列字段的值中有一个双引号。因此,csv数据看起来是畸形的。
univocityparser可以处理未转义的引号,并且比opencsv快4倍。试试下面的代码:
public static void main(String... args){
String input = "" +
"20, "bob, XXX", "test", 30n" +
"20, "evan"s,YYY ", "test", 30n" +
"20, "Tom, ZZZ", "test", 30 ";
CsvParserSettings settings = new CsvParserSettings();
CsvParser parser = new CsvParser(settings);
List<String[]> rows = parser.parseAll(new StringReader(input));
//printing values enclosed in [ ] to make sure you are getting the expected result
for(String[] row : rows){
for(String value : row){
System.out.print("[" + value + "],");
}
System.out.println();
}
}
这将产生:
[20],[bob, XXX],[test],[30],
[20],["evan"s],[YYY "],[test],[30],
[20],[Tom, ZZZ],[test],[30],
另外,您可以使用
之一来控制如何处理未转义的引号:settings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_DELIMITER);
settings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_CLOSING_QUOTE);
settings.setUnescapedQuoteHandling(UnescapedQuoteHandling.RAISE_ERROR);
settings.setUnescapedQuoteHandling(UnescapedQuoteHandling.SKIP_VALUE);
当读取大文件时,您可以使用RowProcessor
或像这样遍历每一行:
parser.beginParsing(new File("/path/to/your.csv"));
String[] row;
while ((row = parser.parseNext()) != null) {
// process row
}
免责声明:我是这个库的作者。它是开源和免费的(Apache 2.0许可)