如何优化开关盒?

时间:2017-01-26 14:47:37

标签: groovy

我有一个像这样的开关盒:

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级联之外,有没有更简单的方法可以做到这一点?

1 个答案:

答案 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”字符。