请考虑以下代码:
String emptyString = '''
'''
println "After trimming empty string has size: " + emptyString.trim().size()
println "Number of non empty elements in array: " + ([emptyString, 'kshitiz'].findAll({ it.trim() != 0}).size())
我希望输出为 1
. 但输出是:
After trimming empty string has size: 0
Number of non empty elements in array: 2
我怀疑我可能会遗漏一些基本的东西,但不能弄清楚是什么 .
2 回答
你的代码应该是:
注意使用length()方法 . 你没有比较字符串的长度 .
闭包
{it.trim() != 0}
中的表达式对于两个列表条目都返回true,无论it.trim()返回的字符串是否为空,因此findAll不会过滤掉任何内容,并且findAll返回的列表大小为2 .修复如
{it.trim().length() != 0}
或{it.trim() != ''}
(您可以在Groovy中执行,因为==
使用equals方法)将起作用但不是必需的 . Groovy将空(零长度)字符串视为false和非空字符串为true,请参阅these examples from groovy-lang.org:删除适得其反的
!= 0
给出已成功过滤掉空条目,其结果为1 .