Groovy:子串的索引?

时间:2011-10-03 09:02:24

标签: groovy

如何在大字符串中找到子字符串的所有出现的索引 - (所以基本上,和“indexOf”功能的扩展)。有什么想法吗?

现状:

def text  = " --- --- bcd -- bcd ---" 
def sub = "bcd"
text.indexOf(sub) 
// = 9

我想要类似的内容:

def text  = " --- --- bcd -- bcd ---" 
def sub = "bcd"
text.indexesOf(sub) 
// = [9,15]

有这样的功能吗?我该怎么办呢? (以非平凡的方式)

2 个答案:

答案 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()