gpt4 book ai didi

java - 以制表符作为引号字符的 CSV

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:42 26 4
gpt4 key购买 nike

我已经为 Java 尝试了几个 CSV 解析器,但没有一个能正确处理以下行:

String str = "\tvalue1\t,,\tv1,",',v3\t,value2"

格式为逗号,以制表符作为转义字符分隔。部分字段为空,部分未转义。

对处理这种格式的解析器有什么建议吗?

例如,我希望上面的字符串将被解析为:

value1
null
v1,",',v3
value2

但它产生了以下内容:

value1
null
v1
"
'
v3
value2

Java 示例:

import java.lang.String;
import com.univocity.parsers.csv.CsvParser;
import com.univocity.parsers.csv.CsvParserSettings;

public class StamMain {

public static void main(String[] args){
String str = "\tvalue1\t,,\tv1,',",v3\t,value2";
System.out.println(str);
CsvParserSettings settings = new CsvParserSettings();
settings.getFormat().setQuote('\t');
CsvParser parser = new CsvParser(settings);
String[] fields = parser.parseLine(str);
for (String f : fields)
System.out.println(f);
}
}

如果将 TAB 替换为引号可获得最佳结果,但引用引号本身就是一项有趣的任务。

任何想法表示赞赏。

最佳答案

Apache Commons CSV可以处理得很好。

String str = "\tvalue1\t,,\tv1,\",',v3\t,value2";
CSVFormat csvFormat = CSVFormat.DEFAULT.withQuote('\t');
for (CSVRecord record : CSVParser.parse(str, csvFormat))
for (String value : record)
System.out.println(value);

输出

value1

v1,",',v3
value2

如果需要,您甚至可以添加 .withNullString("") 来获取空值。

value1
null
v1,",',v3
value2

非常灵活的 CSV 解析器。

关于java - 以制表符作为引号字符的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com