【发布时间】:2010-02-17 00:26:52
【问题描述】:
我有一个以下格式的 csv 文件。如果程序读取了以下任何一个 csv 数据,我会遇到问题
"D",abc"def,"","0429"292"0","11","IJ80","Feb10_1.txt-2","文件记录","05/02/2010" ,"04/03/2010","","1","-91","",""
"D","abc"def","","04292920","11","IJ80","Feb10_1.txt-2","文件记录","05/02/2010"," 04/03/2010","","1","-91","",""
下面的拆分命令用于忽略双引号内的逗号我从之前的帖子中得到了下面的拆分命令。粘贴了我执行此命令的 URL
字符串项[] = line.split(",(?=([^\"]\"[^\"]\")[^\"] em>$)",15); System.out.println("items.length"+items.length);
Regarding Java Split Command Parsing Csv File
items.length 打印为 14 而不是 15。abc"def 未被识别为单个字段,并且它被错误地存储为 "D",abc"def in items[0]. . 我希望它以下面的方式存储
items[0] 应该是 "D" 并且 items[1] 应该是 abc"def
当有一个值“abc”def“时也会发生同样的问题。我希望它被存储为
items[0] 应该是 "D" 并且 items[1] 应该是 "abc"def"
如果双引号在双引号内重复(字段值为 D,"abc""def",1 ),则此拆分命令也可以完美运行。
我该如何解决这个问题。
【问题讨论】:
-
这些不是有效的 CSV 行。引号应该被转义。我建议你写一个简单的小解析器并放弃正则表达式。
-
正如我在您之前的主题中回答的那样:不要使用正则表达式来解析 CSV。这是自找麻烦。 这完全是浪费时间。看我的回答:stackoverflow.com/questions/2241915/…哦,请在这里也使用一个用户帐户。