Groovy字符串连接与空检查

时间:2012-03-19 18:42:40

标签: string groovy null concatenation

有更好的方法吗?注意:part1part2part3是在别处定义的字符串变量(它们可以为null)。

def list = [part1, part2, part3]
list.removeAll([null])
def ans = list.join()

所需的结果是一个连接的字符串,其中省略了空值。

4 个答案:

答案 0 :(得分:11)

你可以这样做:

def ans = [part1, part2, part3].findAll({it != null}).join()

可能能够将结果缩小到{it},具体取决于您的列表项根据Groovy Truth进行评估的方式,但这会使其更加紧张

注意:GDK javadocs很棒的资源。

答案 1 :(得分:5)

如果您使用没有参数的findAll。它将返回每个“真实”值,因此这应该有效:

def ans = [part1, part2, part3].findAll().join()

请注意findAll将过滤掉空字符串(因为它们在布尔上下文中被评估为false),但在这种情况下无关紧要,因为空字符串不会向{{{ 1}}:)

如果这是一个简化的问题,并且您希望保留空字符串值,则可以使用findResults join()

答案 2 :(得分:2)

或者,您可以使用inject进行折叠操作:

def ans = [part1, part2, part3].inject('') { result, element -> 
    result + (element ?: '')
}

这将迭代整个列表并将每个连续元素连接到结果,并使用逻辑将空字符串用于null元素。

答案 3 :(得分:1)

您可以使用grep

groovy:000> list = ['a', 'b', null, 'c']
===> [a, b, null, c]
groovy:000> list.grep {it != null}.join()
===> abc