我正在编写一个Java应用程序,用于将数据从Oracle导出到csv文件
不幸的是,数据的内容可能相当棘手。逗号仍然是分隔符,但行上的一些数据可能是这样的:
| ID | FN | LN | AGE | COMMENT |
|----------------------------------------------------------------|
| 123 | John | Smith | 39 | I said "Hey, I am 5'10"." |
|----------------------------------------------------------------|
这是comment
列中的一个字符串:
我说:“嘿,我身高5英尺10英寸。”
不开玩笑,我需要显示上面的注解没有妥协,在excel或开放办公室从一个CSV文件生成的Java,当然不能搞砸了其他常规转义情况(即常规双引号,和常规逗号在一个元组)。我知道正则表达式是强大的,但我们如何才能实现这样复杂的情况下的目标?
8条答案
按热度按时间jhiyze9q1#
有几个库。下面是两个示例:
❐ Apache Commons Lang(第一个字母)
Apache Commons Lang包含一个特殊类,用于转义或取消转义字符串(CSV、EcmaScript、HTML、Java、Json、XML):
org.apache.commons.lang3.StringEscapeUtils
中的一个。❐ OpenCSV(一个数字)
如果你使用OpenCSV,你将不需要担心转义或unescape,只用于写入或读取内容。
hfsqlsce2#
Excel必须能够处理完全相同的情况。
将这些内容放入Excel中,将其保存为CSV格式,然后用文本编辑器检查该文件。这样,您就会知道Excel在这些情况下应用的规则。
让Java产生相同的输出。
顺便说一下,Excel使用的格式是发布的...
****编辑1:****以下是Excel的功能
****编辑2:****请注意,如果您使用““作为附件,php的
fputcsv
与excel的功能完全相同。就会变成这样:
bq8i3lrv3#
感谢Tony和Paul的快速反馈,这对我很有帮助。我实际上通过POJO找到了一个解决方案。这里是:
简而言之,如果单元格中的字符串中有特殊字符,如逗号或双引号,则首先通过添加额外的双引号(如
"\"\""
)来转义双引号("\""
),然后将整个字符串放入双引号中(如"\""+theWholeThing+"\""
)bejyjqdl4#
如果您使用的是CSVWriter,请检查是否没有
当我删除它时,逗号按预期显示,而不是将其视为新列
iyfamqjs5#
您还可以查看Python writes Excel-compatible
csv
files.我相信Excel的默认设置是对文字引号字符进行加倍-也就是说,文字引号
"
被写为""
。mqxuamgl6#
将其保存为csv文件并查看结果,因此使用双引号进行转义
重要说明
会得到不同的结果,因为逗号后面有一个空格,而这个空格会被视为“
smdnsysy7#
这将在CSV文件中保留逗号
bqf10yzr8#
在openCSV中,使用以下方法创建csvWriter对象:
在这方面,
DEFAULT_QUOTE_CHARACTER
是非常重要的。它将完美地工作,如果你想插入任何','或'"'在csv文件。