2011-10-03 4 views
3

큰 문자열에서 부분 문자열의 모든 출현 인덱스를 찾으려면 어떻게해야합니까? (기본적으로 "indexOf"기능의 확장). 어떤 아이디어?Groovy : 부분 문자열의 색인?

현재 상황 :

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

내가 좋아하는 뭔가를 원하는 :

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

그런 기능이 있습니까? 그렇지 않으면 어떻게 구현해야합니까? 이 중복 인스턴스를 찾을 것

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]를 반환합니다) :

+0

질문은 무엇입니까 무료로 당신이 얻을 것을 현재 그루비에 존재하지입니까? "어떻게 구현합니까?" 또는 "그런 것이 있습니까?" 또는 "...?" –

+0

질문에 감사를 표합니다. – Yossale

답변

7

당신은 그래서 같은 String 메타 클래스에 새로 추가를 작성할 수

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) 

가 나는 것을 알고 아무것도하지만

+0

hehehe .. what'println'? ;-) _ * 휘파람 무심코 * _ –

+0

이전 무한 루프가 있었 으리라 생각했는데 ;-) 하나씩 오류가 발생했습니다 –

+0

하하하, 네 ... 나는 indexOf에서'int'라고 생각했습니다. 배타적이었다 ;-) –

4

(비 사소한 방법)이 상대적으로 쉬운 방법입니다. 이 방법을 사용하지 않으려면 index+1index+arg.length()으로 대체하십시오.

+0

+1 hehe ... ~ 30 초가 너무 늦었습니다 .--) –

관련 문제