큰 문자열 (소스) 내의 하위 문자열 (대상)에 대한 모든 인덱스 목록을 얻으려면 스칼라 라이브러리 API 방법이 있습니까 (아니라면 관용적 방법)? ScalaDoc을 살펴 보려고했지만 명백한 것을 찾을 수 없었습니다. 너무 많은 유용한 것들을하는 많은 방법이 있습니다. 나는 정확한 검색 용어를 제출하지 않고 있다고 생각합니다.특정 하위 문자열의 모든 인덱스를 반환합니다.
예를 들어 "name : Yo, name : Jim, name : name, name : bozo"라는 소스 문자열이 있고 "name :"이라는 대상 문자열을 사용하고 싶습니다. 목록의 [Int]를 나열하십시오 (0, 8, 17, 27).
def indexesOf(source: String, target: String, index: Int = 0, withinOverlaps: Boolean = false): List[Int] = {
def recursive(index: Int, accumulator: List[Int]): List[Int] = {
if (!(index < source.size)) accumulator
else {
val position = source.indexOf(target, index)
if (position == -1) accumulator
else {
recursive(position + (if (withinOverlaps) 1 else target.size), position :: accumulator)
}
}
}
if (target.size <= source.size) {
if (!source.equals(target)) {
recursive(0, Nil).reverse
}
else List(0)
}
else Nil
}
모든 지침 당신이 날 주시면 감사하겠습니다 적절한 표준 라이브러리 진입 점과이 대체 제공 할 수 있습니다 :
다음은 문제를 해결하기 위해 내 빠른 해킹.
는 UPDATE 2014/7월/22 : 싯다르타 두타의 대답에 영감을
, 내 코드를 tighted. 지금은 다음과 같습니다
def indexesOf(source: String, target: String, index: Int = 0, withinOverlaps: Boolean = false): List[Int] = {
@tailrec def recursive(indexTarget: Int, accumulator: List[Int]): List[Int] = {
val position = source.indexOf(target, indexTarget)
if (position == -1) accumulator
else
recursive(position + (if (withinOverlaps) 1 else target.size), position :: accumulator)
}
recursive(index, Nil).reverse
}
을 또한, 나는 "AAAAAAAA"의 소스 문자열을 가지고 있고이 "AA"의 대상 문자열을 사용하는 경우, 내가 다시 목록 [지능]의 얻기 위해 기본적으로 싶습니다 발견 된 부분 문자열 내에서 검색을 건너 뛰는 목록 (0, 2, 4, 6). "aaaaaaaa"/ "aa"경우 List (0, 1, 2, 3, 4, 5, 6)를 반환하는 withinOverlaps 매개 변수에 "true"를 전달하여 기본값을 재정의 할 수 있습니다.
아니오, "는 [표준] 방법"이없는을 얻을 수 있습니다. 또한이 코드는 작동중인 코드이므로 코드 검토에 더 적합 할 수도 있습니다. – user2864740
@ chaotic3quilibrium 어떤 방법 으로든 BSD 라이센스로 그 방법을 사용하면 사장님이 복사/수정하면 저에게 화를 내지 않으실 겁니다. :) – ericpeters
@ericpeters StackOverflow에 게시 된 코드 스 니펫은 본질적으로 공개 도메인이라고 가정 할 수 있습니다. 즉, 필요한 모든 컨텍스트로 스 니펫을 잘라내거나 붙여 넣거나 수정하거나 사용자 정의 할 수있는 능력을 제한하는 라이센스 제한으로 인해 제약을받지 않습니다. – chaotic3quilibrium