是否有 Spring 函数可以删除 CSV 文件中的引号或分隔符?

Is there a Spring function that will remove a quote character or delimiter in a CSV file?

我正在阅读 Spring 中的一百万条记录文件,其中字段用 " 字符引用,分隔符是 | 字符。

示例:

"name1"|"name2"|"na"me3"|"name4"|....

我使用:

DelimitedLineTokenizer.setQuoteCharacter('"')

删除双引号字符,但name3字段中的双引号没有正确处理。

问题 - 结果是:

Obj.name1 = name1 
Obj.name2= name2
Obj.name3 = name3|name4 
Obj.name4 = null

根据 CSV RFC 第 2.7 节,您的 CSV 文件无效。以下是规范的摘录:

If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote

如果您像 RFC 中提到的那样转义 ",Spring Batch 将正确标记该行,这是 v4.2.2 的快速(通过)测试:

@Test
public void testSo61636078() {
    DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
    tokenizer.setDelimiter("|");
    tokenizer.setQuoteCharacter('"');
    FieldSet fieldSet = tokenizer.tokenize("\"name1\"|\"name2\"|\"na\"\"me3\"|\"name4\"");
    assertEquals(4, fieldSet.getFieldCount());
    assertEquals("name1", fieldSet.readString(0));
    assertEquals("name2", fieldSet.readString(1));
    assertEquals("na\"me3", fieldSet.readString(2));
    assertEquals("name4", fieldSet.readString(3));
}