Groovy 无最终修剪的槽形劈裂

Groovy 无最终修剪的槽形劈裂,groovy,Groovy,我正在解析一个CVS文件,如下所示: "07555555555",25.70,18/11/2010,01/03/2011,N,133,0,36,,896,537,547,,Mr,John,Doe,, "07555555555",10.15,26/01/2011,01/03/2011,N,16,0,100,,896,537,547,,Mrs,Jane,Doe,,jane@doe.com 16 18 问题是,当使用这样的脚本时: file.eachLine{ line -> it

我正在解析一个CVS文件,如下所示:

"07555555555",25.70,18/11/2010,01/03/2011,N,133,0,36,,896,537,547,,Mr,John,Doe,,
"07555555555",10.15,26/01/2011,01/03/2011,N,16,0,100,,896,537,547,,Mrs,Jane,Doe,,jane@doe.com
16
18
问题是,当使用这样的脚本时:

file.eachLine{ line ->

    items = line.split(",")
    println items.length
}
结果如下所示:

"07555555555",25.70,18/11/2010,01/03/2011,N,133,0,36,,896,537,547,,Mr,John,Doe,,
"07555555555",10.15,26/01/2011,01/03/2011,N,16,0,100,,896,537,547,,Mrs,Jane,Doe,,jane@doe.com
16
18

这让我想到,split函数会删除一个最终值。我需要它有所有的项目,即使他们是空的。有什么想法吗?

我想你应该:

items = line.split(',', -1)
确保你拿到所有的代币

(根据):

limit参数控制 应用模式的次数 因此会影响 生成的数组。如果限制n为 大于零,则该模式无效 最多应用n-1次, 数组的长度将不会大于 大于n,并且数组的最后一个条目 将包含最后一个之外的所有输入 匹配的分隔符如果n为 非正,则模式将为 尽可能多次使用,并且 数组可以有任意长度。如果n是 零,则将应用该模式 在尽可能多的情况下,阵列 可以有任何长度和尾随 空字符串将被丢弃


使用库而不是自己为csv重新创建解析逻辑可能是值得的。我建议使用opencsv或groovycsv,这是opencsv的groovy包装(免责声明:我是groovycsv的作者)。您可以在此处阅读有关在groovy中解析csv的更多信息: