首页 > 解决方案 > Java如何删除双引号文本限定符之间的双引号字符

问题描述

我有一个 csv 文件,其中每个字段(列标题除外)都有一个双引号文本限定符: field: "some value"。但是,文件中的某些字段在值中有双引号;字段 2 :或字段 3 "25" TV":或字段4 "25" x 14" x 2"":。"A"bcd"ef"g"(我认为你说对了)。如果我有字段 2-4 中的数据,我的 java 文件处理失败,因为我指定双引号是字段上的文本限定符,并且看起来该行的字段太多。如何执行以下任一或所有操作:

我对此文件的控制程度如何?该文件按原样提供,但我只需要来自文件中两个不同列的数据。我可以做任何我需要做的事情来获取这些数据。

标签: javacsv

解决方案


首先,如果它确实是一个 CSV 文件,您应该使用逗号将每一行分成几列。

一旦它在列中断开,如果我们确定该值应该以双引号 (") 开头和结尾,我们可以简单地删除所有双引号,然后重新应用开头和结尾的双引号。

    String input = "\"hello\",\"goodbye Java \"the best\" language\", \"this is really \"\"\"bad\"";
    String[] parsed = input.split(",");
    String[] clean = new String[parsed.length];
    int index = 0;
    for (String value : parsed) {
        clean[index] = "\"" + value.replace("\"", "") + "\"";
        index++;
    }

如果值中可能存在逗号,则应使用以下内容

    String input = "\"hello\",\"goodbye,\" Java \"the best\" language\", \"this is really \"\"\"bad\"";
    String[] parsed = input.split("\"\\s*,\\s*\"");
    String[] clean = new String[parsed.length];
    int index = 0;
    for (String value : parsed) {
        clean[index] = "\"" + value.replace("\"", "") + "\"";
        index++;
    }
}

请注意,如果 \"\s*,\s*\" 的序列存在于一个值中,则该记录将是不明确的。例如,如果它是一个两列文件,则输入记录“abc”、“def”、“ghi”可以是

值 1 = "abc","def" 值 2 = "ghi" 或值 1 = "abc" 值 2 = "def","ghi"


推荐阅读