Groovy:标记字符串直到分隔符的第三次出现

问题描述

我要对字符串进行标记化,直到出现第三个定界符,然后将字符串的其余部分作为标记化数组的最后一个元素返回。 例: 我有一个看起来像这样的字符串:

String someString= 1.22.33.4

现在通过定界符'。对其进行标记。像这样:

def (a,b,c,d) = someString.tokenize('.')

它有效,但前提是点数恰好是3。 现在,如果有人放置更多点,例如:

String someString = 1.22.33.4.55

然后它将不起作用,因为变量数量不匹配。因此,我想确保它只会对最多第三个点进行标记化,然后将剩下的全部归还。所以在这种情况下我想要实现的是:

a = 1,b=22,c=33,d=4.55

该怎么做?

解决方法

您可以将split的版本与第二个参数一起使用来限制 返回的项目。例如

def (a,b,c,d) = '1.22.33.4.55'.split("\\.",4)
assert ["1","22","33","4.55"] == [a,d]
,

不是一个班轮,但它可以工作:

String someString= '1.22.33.4.55'
def stringArray = someString.tokenize('.')
def (a,c) = stringArray
def d = stringArray.drop(3).join('.')

println "a=$a,b=$b,c=$c,d=$d"

结果:

a=1,b=22,c=33,d=4.55