请考虑以下代码:
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
我怀疑我可能会遗漏一些基本的东西,但却无法弄清楚是什么。
答案 0 :(得分:1)
对于两个列表条目,闭包IE = navigator.userAgent.match(/msie/i)
中的表达式都返回true,无论it.trim()返回的字符串是否为空,因此findAll不会过滤掉任何内容和大小findAll返回的列表是2。
{it.trim() != 0}
或{it.trim().length() != 0}
(您可以在Groovy中执行,因为{it.trim() != ''}
使用equals方法)这样的修补程序可以正常工作但不是必需的。 Groovy将空(零长度)字符串视为true和非空字符串为true,请参阅these examples from groovy-lang.org:
==
删除适得其反的assert 'a'
assert !''
def nonEmpty = 'a'
assert "$nonEmpty"
def empty = ''
assert !"$empty"
给出了
!= 0
,评估为1,成功过滤掉空条目。
答案 1 :(得分:1)
您的代码应为:
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().length() != 0}).size())
注意使用length()方法。你没有比较字符串的长度。