如何在Groovy数组中grep%呢?

如何在Groovy数组中grep%呢?,groovy,Groovy,给定下面的Groovy数组(请注意%): 有没有办法检查数组元素是否包含% 我尝试了Groovy“find”、“findAll”和“any”方法的各种组合,但这些方法只匹配整个字符串,而不匹配其中的单个字符 grep似乎是解决方案,但当我尝试这样做时: def name = list.grep(~/%/) println(name) 它只打印[] 我想测试%是否出现在数组元素的任何位置。您必须告诉正则表达式选择性地将%前后的字符与*或类似的字符匹配,即这应该可以: list.grep(~/.*

给定下面的Groovy数组(请注意%):

有没有办法检查数组元素是否包含%

我尝试了Groovy“find”、“findAll”和“any”方法的各种组合,但这些方法只匹配整个字符串,而不匹配其中的单个字符

grep似乎是解决方案,但当我尝试这样做时:

def name = list.grep(~/%/)
println(name)
它只打印[]


我想测试%是否出现在数组元素的任何位置。

您必须告诉正则表达式选择性地将
%
前后的字符与
*
或类似的字符匹配,即这应该可以:

list.grep(~/.*%.*/)

grep
可以像您一样用于筛选数组。它将返回符合条件的所有元素

唯一的问题是您使用的正则表达式应该是
~/.*%.*/
,而不是
~/%/


顺便说一下,
findAll
也可以像grep一样工作:

list.findAll { s -> s ==~ /.*%.*/ }​
运算符
==~
是正则表达式的匹配器


如果您只是想得到一个truthy(true/false),要检查是否至少有一个元素符合条件,
any
也可以:

list.any { s -> s ==~ /.*%.*/ }​

一个稍微不同的选择

def list = ["H 11 * * * % env=TEST;state=UP"]
def a = list.findAll { it.indexOf('%') }

if (a.size() > 0) {
print "Found: " + a.size()
}

非常感谢Andre Mota、Fergara和tim_yates抽出时间回答我的问题。你所有的解决方案都非常有效。如果可以的话,我会勾选你所有的答案,但我选择Andre的真/假解决方案,因为它最适合我的要求,即根据数组元素是否有%添加一些额外的代码。非常感谢大家。
def list = ["H 11 * * * % env=TEST;state=UP"]
def a = list.findAll { it.indexOf('%') }

if (a.size() > 0) {
print "Found: " + a.size()
}