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 중국어 웹사이트의 기타 관련 기사를 참조하세요!