Java如何删除双引号文本限定符之间的双引号字符

Java如何删除双引号文本限定符之间的双引号字符,java,csv,Java,Csv,我有一个csv文件,其中每个字段(列标题除外)都有一个双引号文本限定符:field:“some value”。但是,文件中的某些字段在值中有双引号;字段2:“25”电视“或字段3:“25”x 14”x 2”或字段4:“bcd”ef“g”(我想你明白了)。如果我有字段2-4中的数据,我的java文件进程将失败,因为我指定双引号是字段上的文本限定符,并且看起来该行的字段太多。如何执行以下操作或全部操作: 从字段内部删除双引号字符 用另一个值替换双引号字符 让我的java进程在一个字段中“忽略”或“

我有一个csv文件,其中每个字段(列标题除外)都有一个双引号文本限定符:field:
“some value”
。但是,文件中的某些字段在值中有双引号;字段2:
“25”电视“
或字段3:
“25”x 14”x 2”
或字段4:
“bcd”ef“g”
(我想你明白了)。如果我有字段2-4中的数据,我的java文件进程将失败,因为我指定双引号是字段上的文本限定符,并且看起来该行的字段太多。如何执行以下操作或全部操作:

  • 从字段内部删除双引号字符
  • 用另一个值替换双引号字符
  • 让我的java进程在一个字段中“忽略”或“跳过”双引号

我对该文件的控制级别是什么?该文件按原样输入,但我只需要文件中两个不同列的数据。我可以对其执行任何操作以获取该数据。

注意,许多CSV实现将双引号转义为两个连续引号


因此,
“25”“TV”
可能(应该?)是您的输入。

首先,如果它确实是一个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” 或
value 1=“abc”value 2=“def”,“ghi”

假设逗号是列分隔符,并且每列都用双引号括起来:

String[] columns = input.split("\",\"");
if (columns.length > 0) {
  columns[0] = columns[0].substring(1);
  String lastColumn = columns[columns.length-1];
  columns[columns.length-1] = lastColumn.substring(0,lastColumn.length()-1);
}

列仍将具有内部双引号。如果不需要,可以将其替换掉。

选项4-停止生成无效的CSV以开始with@SeanBright正如我所说,文件按原样提交。所以我必须用我所得到的东西来工作。以下这些都是真的吗?1) 标题中的所有列都没有引号,2)数据行中的所有列都有引号?可以只取一个子字符串吗?如果你能保证名字的开头和结尾都有引号,这将是最快的选择。也许我在这里遗漏了什么。您是否手动解析csv?我假设如果文件本身是无效的CSV,没有库会支持它?问题是他们无法控制文件格式:p如果它不是真正的CSV。这是我很久以前写的一个基于状态机的CSV解析器。州政府会记住它是否看到了引号或逗号,并且可能会做正确的事情。对不起,医生。如果内部引号后面跟一个逗号怎么办?@SeanBright-如果值中允许逗号,那么会有一些记录确实不明确。例如,如果只有两列,我们将如何解析“abc”、“def”、“hig”,第一个值是“abc”,第二个值是“def”、“hig”,还是第一个值是“abc”、“def”和第二个值是“hig”?