Groovy 如何找到内部嵌套的内容?
假设我有这样一个字符串:Groovy 如何找到内部嵌套的内容?,groovy,Groovy,假设我有这样一个字符串: string = [+++[>>[--]]]abced 现在我需要一种方法来返回一个列表,该列表有:[[[-],[>>],[+++]]。这就是最深的[嵌套的内容,然后是其他嵌套。我提出了如下解决方案: def string = "[+++[>>[--]]]" loop = [] temp = [] string.each { bool = false if(it == "["){ temp = []
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()
def string=“[++[>>[--]]”
循环=[]
温度=[]
字符串。每个{
bool=false
如果(它=“[”){
温度=[]
布尔=真
}
否则,如果(它!=“]”)
温度],++++]]
有什么常规方法可以解决这个问题吗?如果括号是对称的,可以引入一个计数器变量来保持括号嵌套的深度。输出中只允许深度级别大于0:
def string = "[+++[>>[--]]]abc"
loop = []
temp = []
depth = 0;
string.each {
bool = false
if(it == "["){
temp = []
bool = true
depth++;
}
else if (it == "]"){
depth--;
}
else if (depth > 0){
temp << it
}
if(bool){
loop << temp
}
}
println loop.reverse()
def string=“[++[>>[--]]]abc”
循环=[]
温度=[]
深度=0;
字符串。每个{
bool=false
如果(它=“[”){
温度=[]
布尔=真
深度++;
}
else if(it==“]”){
深度--;
}
如果(深度>0){
如果您不介意使用递归,可以使用这个
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''' , [])
返回大括号之间包含的所有子部分的列表
['--', '>>', '+++']
System.out
[--, >>, +++]
正则表达式模式中第一个组的捕获可能会得到改进。现在第一个组是不是[
的任何字符,如果第一个[
前面没有任何字符,那么第一个组将包含一个空字符串
[--, >>, +++]