假设我有一个像这样的字符串:
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/