java编写CSV,文本加引号,数值不加引号
使用OpenCSV,我试图编写一个CSV文件,其中
- 文本值被
"
引号包围李> - 数值而不是被引号包围(因为它们应该被最终读取CSV文件的程序视为数字,而不是字符串)李>
所需输出示例:
读取CSV文件的程序所需的格式:
"Header 1","Header 2","Header 3"
123.4,234.6,999.8
456456.32,1222.4,2222.2
尝试的解决方案:
到目前为止,我最好的尝试是:
CSVWriter csvWriter = new CSVWriter(new FileWriter(csvFile),',','\0');
其中引号char被设置为'\0'
,即空字符(分隔符像往常一样保留为,
)
这不会在任何值周围加引号。为了弥补文本值周围缺少"
引号的缺陷,我“手动”在每个文本值前面加上一个"\""
引号(这是非常容易管理的,因为我的标题实际上是唯一包含文本的东西)
for (int i=0;i<headers.length;++i) {
headers[i] = "\"" + headers[i] + "\"";
}
实际输出:
我真的以为这会解决问题,但结果是这样的:
""Header 1"",""Header 2"",""Header 3""
123.4,234.6,999.8
456456.32,1222.4,2222.2
文本值用双引号括起来""
- 为什么李>
- 我该怎么解决这个问题李>
# 1 楼答案
您可以将转义字符指定为
'\0'
,这将阻止OpenCSV转义您现有的引号:输出:
当然,你很快就到达了OpenCSV对你毫无帮助的阶段。如果处理所有转义和引用,那么OpenCSV只是将字符串数组与逗号连接起来
放弃这个库并自己编写少量代码可能是明智的——这将避免未来的维护人员感到困惑,他们认为“Hmmm,这是我们在这里生成的非常奇怪的CSV数据!”