Groovy拆分csv和空字段

jan*_*nar 4 groovy

Groovy拆分似乎忽略了空字段.

这是代码:

line = abc,abc,,,
line.split(/,/)
println
Run Code Online (Sandbox Code Playgroud)

仅打印..

abc abc
Run Code Online (Sandbox Code Playgroud)

它似乎忽略了空字段.如何使用拆分检索空字段?

dma*_*tro 11

首先,Groovy不提供方法split(regex),它由Java提供.

其次,您可以使用泛型拆分(regex,int limit)实现所需,如下所示:

def line = "abc,abc,,,"

println line.split(/,/, -1) //prints [abc, abc, , , ]
println line.split(/,/, -1).size() //prints 5
Run Code Online (Sandbox Code Playgroud)

注意: -
在打印时最终会出现的字符串数组会在声明时抛出编译错误.但您可以将结果用作普通列表.

line.split(/,/, -1).each{println "Hello $it"}
Run Code Online (Sandbox Code Playgroud)

我宁愿使用limit 0或重载拆分来丢弃不需要的空字符串.

关于使用-1作为限制的说明:
强调来自javadoc的以下语句.

limit参数控制模式的应用次数,因此会影响结果数组的长度.如果限制n大于零,那么模式将最多应用n - 1次,数组的长度将不大于n,并且数组的最后一个条目将包含超出最后匹配分隔符的所有输入.如果n是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度.如果n为零,那么模式将被应用尽可能多的次数,数组可以具有任何长度,并且将丢弃尾随的空字符串.