java - 使用 CSV 解析器解析 CSV 文件时忽略字段中的双引号

标签 java csv opencsv apache-commons-csv

示例数据 -

标题 1、全名、标题 3、标题 4

  1. 20,“鲍勃,XXX”,“测试”,30
  2. 20, "evan"s,YYY", "测试", 30
  3. 20,“汤姆,ZZZ”,“测试”,30

    CSVReader csvReader = new CSVReader(reader, ',', '"');
    

第二行没有按预期读取。因为 full_name 列值中有双引号。

我想忽略这种情况。任何建议将不胜感激。

使用 openCSV java api 进行解析。

编辑:

我正在从数据库中获取数据。数据库列字段之一在其值中有一个双引号。因此,csv 数据看起来格式不正确。

最佳答案

univocity-parsers可以处理未转义的引号,并且比 opencsv 快 4 倍。试试这个代码:

public static void main(String... args){
    String input = "" +
            "20, \"bob, XXX\", \"test\", 30\n" +
            "20, \"evan\"s,YYY \", \"test\", 30\n" +
            "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 许可证)

关于java - 使用 CSV 解析器解析 CSV 文件时忽略字段中的双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517663/

相关文章:

java - 如果需要用户输入整数,如何处理无效输入?

java - Spring Boot 测试 - 没有 'com.example.MyService' 类型的合格 bean 可用

java - 由用户创建新实例

java - 如何使用 OpenCSV 区分空字符串和 null

java - 使用 newOutputStream 方法定义文件位置

java - 从 Spring MVC 上的另一个模块访问静态资源

python - 如何使用 Python 删除/去除我的 csv 文件中的白色/空白行?

python - 使用python在django中将数据库转换为csv

excel - 将csv导入excel的vbscript

java - OpenCSV 写入限制