我想知道是否有任何groovy方法来检查字符串的子串是否与模式匹配。
例如我有字符串List(或数组):
def Errors = ['File xyz cannot be created: No space left on device', 'File kjh has errors: some_error']
然后我有字符串列表,例如def Patterns = ['Tests failed', 'No space left on device', 'Something goes wrong', ...some strings... ]
我想检查列表Patterns
的某些元素是否是Errors
元素的子字符串。
在该示例中,它应该返回true,因为Patterns
有No space left on device
而Errors
有'File xyz cannot be created: No space left on device'
。
我知道如何通过使用两个for循环和方法contains
来编写非常强大且无效的方法,但我知道Groovy具有更强大的内置方法。我曾尝试使用findAll()
,但它根本不起作用。
你有什么想法吗?有没有办法让它变得更聪明?
答案 0 :(得分:4)
明确命名pattern
和error
:
patterns.find { pattern -> errors.find { error -> error.contains(pattern) } } // -> No space left on device
patterns.any { pattern -> errors.find { error -> error.contains(pattern) } } // -> true
取决于您想要查找的内容/数量。
甚至更短:
patterns.find { errors.find { error -> error.contains(it) } }
patterns.any { errors.find { error -> error.contains(it) } }