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

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

Susan Sarandon
풀어 주다: 2024-12-30 01:59:08
원래의
363명이 탐색했습니다.

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

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

문제:

큰 문자열이 주어지면 지정된 문자열이 모두 나타나는 위치를 식별하고 저장해야 합니다. 해당 문자열 내의 하위 문자열입니다. 예를 들어 하위 문자열이 "extract"(me,i-have lot. of]구두점"인 경우 더 큰 문자열의 시작과 중간에 나타나면 두 인스턴스를 모두 찾아서 해당 인덱스 위치를 목록에 추가해야 합니다. 0과 중간 발생 인덱스를 포함하는 목록.

해결책:

제공된 코드는 IndexOf 메서드를 활용합니다. 그러나 이 메서드는 첫 번째 일치 항목만 반환합니다. 모든 항목을 찾으려면 더 이상 일치하는 항목이 없을 때까지 이전 일치 항목 이후부터 시작하여 IndexOf를 반복적으로 호출하는 루프를 사용할 수 있습니다. 그런 다음 인덱스 위치를 원하는 목록에 추가할 수 있습니다.

제공된 버전의 수정된 버전은 다음과 같습니다. 코드:

List<int> inst = new List<int>();
int index = 0;
while (index < source.Length)
{
    int src = source.IndexOf("extract\"(me,i-have lots. of]punctuation", index);
    if (src == -1)
        break;  // No more occurrences found
    inst.Add(src);
    index = src + 40; // Advance the search index to beyond the current match
}
로그인 후 복사

대체 접근 방식:

또 다른 해결 방법은 더 큰 편의를 위해 확장 메서드를 사용하는 것입니다. 다음은 반복자 패턴을 활용하는 확장 메서드의 예입니다.

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;
    }
}
로그인 후 복사

이 확장 방법을 사용하면 다음과 같이 하위 문자열의 모든 항목을 쉽게 찾을 수 있습니다. 다음:

List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");
로그인 후 복사

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿