我有一个像这样的开关盒:
def someString = 'hello1234bla'
// ...
switch (someString) {
case {it.contains('1234')}:
doSomething()
break
case {it.contains('2468')}:
doSomethingElse()
break
default:
throw new Exception("ERROR: Number not found")
break
}
对于看似简单的事情,这似乎是相当多的代码。我想要的是在 someString 包含特定子字符串时执行不同的功能。除了if-else级联之外,有没有更简单的方法可以做到这一点?
答案 0 :(得分:2)
这与上面的评论非常接近,但我会写一个带缩进等的工作示例,也许它会更具可读性:
def someString = "hello1234blae"
someString.eachMatch(/1234/) { println "do something" }
someString.eachMatch(/2468/) { println "do something else" }
这将执行第一个匹配操作,如果未找到匹配项则抛出异常。如果您需要为每场比赛执行操作,请将find来电替换为findAll。
基于字符串中的模式执行代码的另一种方法是groovy String eachMatch方法:
someString.eachMatch(/e/) { println "runs twice" }
使用正则表达式并在每次匹配时运行闭包(eachMatch调用后的curlies中的块)。因此:
Activity
上面的字符串上的将执行两次,因为字符串中有两个“e”字符。