>백엔드 개발 >C++ >C#의 더 큰 문자열 내에서 하위 문자열의 모든 발생을 어떻게 찾을 수 있습니까?

C#의 더 큰 문자열 내에서 하위 문자열의 모든 발생을 어떻게 찾을 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-28 22:52:15690검색

How Can I Find All Occurrences of a Substring within a Larger String in C#?

C#의 더 큰 문자열에서 모든 하위 문자열 위치 찾기

큰 문자열로 작업할 때 특정 하위 문자열의 모든 인스턴스를 찾는 것이 중요할 수 있습니다. 구문 분석 및 데이터 분석을 위해. 이 문서에서는 그러한 인스턴스를 모두 찾아 해당 인덱스를 목록에 저장하는 문제를 다룹니다.

문제 설명

분석해야 할 큰 문자열이 있습니다. 이 문자열 내에서 특정 하위 문자열이 나타나는 모든 위치를 식별하고 저장해야 합니다. 예제 문자열이 "extract"(me,i-have lot. of]구두점"이라고 가정해 보겠습니다. 더 큰 문자열 내에서 이 하위 문자열이 나타나는 모든 항목을 찾고 해당 색인을 목록에 추가하려고 합니다.

해결 방법

방법 1:

C#의 IndexOf 메서드를 사용하면 첫 번째 부분 문자열을 찾습니다. 그러나 모든 항목을 찾으려면 루프를 사용하여 문자열을 반복하고 더 이상 인스턴스가 발견되지 않을 때까지 계속 검색해야 합니다.

이 기술은 다음을 사용하여 개선할 수 있습니다. 코드를 더 간결하게 만드는 확장 메서드는 다음과 같습니다.

public static List<int> AllIndexesOf(this string str, string value) {
    if (String.IsNullOrEmpty(value))
        throw new ArgumentException("the string to find may not be empty", "value");
    List<int> indexes = new List<int>();
    for (int index = 0;; index += value.Length) {
        index = str.IndexOf(value, index);
        if (index == -1)
            return indexes;
        indexes.Add(index);
    }
}

메서드 2:

또는 반복자를 사용하여 인덱스를 순차적으로 생성할 수도 있습니다.

public static IEnumerable<int> AllIndexesOf(this string str, string value) {
    if (String.IsNullOrEmpty(value))
        throw new ArgumentException("the string to find may not be empty", "value");
    for (int index = 0;; index += value.Length) {
        index = str.IndexOf(value, index);
        if (index == -1)
            break;
        yield return index;
    }
}

이 두 방법 모두 모든 문자열 객체에 쉽게 추가할 수 있으므로 모든 하위 문자열을 찾는 것이 편리합니다. 예를 들어, 다음 줄은 문자열 내에서 하위 문자열 "foo"를 모두 찾습니다. "fooStringfooBar":

List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");

위 내용은 C#의 더 큰 문자열 내에서 하위 문자열의 모든 발생을 어떻게 찾을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.