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