如何在大字符串中找到子字符串的所有出现的索引 - (所以基本上,和“indexOf”功能的扩展)。有什么想法吗?
现状:
def text = " --- --- bcd -- bcd ---"
def sub = "bcd"
text.indexOf(sub)
// = 9
我想要类似的内容:
def text = " --- --- bcd -- bcd ---"
def sub = "bcd"
text.indexesOf(sub)
// = [9,15]
有这样的功能吗?我该怎么办呢? (以非平凡的方式)
答案 0 :(得分:7)
你可以像String
metaClass那样写一个新的加法:
String.metaClass.indexesOf = { match ->
def ret = []
def idx = -1
while( ( idx = delegate.indexOf( match, idx + 1 ) ) > -1 ) {
ret << idx
}
ret
}
def text = " --- --- bcd -- bcd ---"
def sub = "bcd"
text.indexesOf(sub)
目前没有任何我知道在groovy中存在的东西可以免费获得这个
答案 1 :(得分:4)
这是一种相对简单的方法:
String.metaClass.indexesOf = { arg ->
def result = []
int index = delegate.indexOf(arg)
while (index != -1) {
result.add(index);
index = delegate.indexOf(arg, index+1);
}
return result;
}
请注意,此将找到重叠的实例(即"fooo".indexesOf("oo")
将返回[1, 2]
)。如果您不想这样做,请将index+1
替换为index+arg.length()
。