groovy - 如何找到内嵌套的内容?

标签 groovy

假设我有一个像这样的字符串:

string = [+++[>>[--]]]abced

现在我想要一种返回包含以下内容的列表:[[--],[>>],[+++]]。这是最深的 [ 嵌套的内容,然后是其他嵌套。我想出了这样的解决方案:

def string = "[+++[>>[--]]]"
loop = []
temp = []
string.each {
    bool = false
    if(it == "["){
        temp = []
        bool = true
    }
    else if( it != "]")
        temp << it 
    if(bool)
         loop << temp

}
println loop.reverse()

但这确实将最后一个 ] 之后的 abced 字符串放入结果中!但我想要的只是 [[--],[>>],[+++]]

有什么绝妙的方法可以解决这个问题吗?

最佳答案

如果您不介意使用递归,则可以使用它

def sub(s , list){
    if(!s.contains('[') && !s.contains('[')) 
        return list
    def clipped = s.substring(s.lastIndexOf('[')+1, s.indexOf(']'))
    list.add(clipped)
    s = s - "[$clipped]"
    sub(s , list)
}

调用

sub('''[+++[>>[--]]]abced''' , [])

返回大括号内所有子部分的列表。

['--', '>>', '+++']

关于groovy - 如何找到内嵌套的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12066015/

相关文章:

java - 了解 groovy 中 map 内容的不同之处

regex - 常规正则表达式测试失败

java - Groovy 使用反射读取特征方法

debugging - 在 IntelliJ Idea 中调试时避免 Groovy/Grails 内部机制

grails - Grails-需要根据联接表上的条件限制提取的行

grails - 使用Grails插件 “uml-class-diagram:0.4.4”时出现的问题

java - GroovyShell - 将脚本分成两部分时出错 (MissingMethodExceptionNoStack)

Groovy CliBuilder : only last LongOpt is taken in account

Groovy 的 TimeCategory 与 LocalDate 和 LocalDateTime

java - 是否有任何理由在混合代码项目中使用 javac 而不是 groovyc?