C#에서 문자열 내에 특정 단어가 몇 번 등장하는지 확인해야 하는 경우가 자주 있습니다. 예를 들어 로그 분석, 텍스트 처리, 검색 기능 구현 등 다양한 상황에서 유용하게 활용할 수 있습니다. 이번 글에서는 IndexOf 메서드와 반복문을 활용해 단어의 등장 횟수를 계산하는 방법을 알아보겠습니다.
1. 대상 문자열 준비하기
먼저 검색 대상이 될 문자열을 선언합니다.
string str = "Hello World! Hello!";
위 문자열에는 "Hello"라는 단어가 두 번 포함되어 있습니다.
2. IndexOf로 단어 위치 찾기
문자열의 IndexOf 메서드는 지정한 패턴이 처음 나타나는 인덱스를 반환하며, 찾지 못하면 -1을 반환합니다. 두 번째 매개변수에 시작 위치를 전달하면 해당 위치부터 검색을 진행할 수 있으므로, 이를 활용해 반복적으로 단어를 찾을 수 있습니다.
while ((a = str1.IndexOf(pattern, a)) != -1) {
a += pattern.Length;
count++;
}동작 방식은 다음과 같습니다.
- IndexOf(pattern, a): 인덱스 a부터 pattern을 검색합니다.
- 단어를 찾으면 그 위치를 a에 저장하고, a += pattern.Length로 검색 시작점을 찾은 단어 뒤로 이동시킵니다.
- 찾을 때마다 count를 1씩 증가시키고, 더 이상 찾지 못하면(-1) 반복문이 종료됩니다.
전체 예제 코드
아래는 위 로직을 하나의 정적 클래스로 정리한 완전한 예제입니다. 실행 결과를 바로 확인해 보세요.
using System;
class Program {
static void Main() {
string str = "Hello World! Hello!";
Console.WriteLine("Occurrence:" + Check.CheckOccurrences(str, "Hello"));
}
}
public static class Check {
public static int CheckOccurrences(string str1, string pattern) {
int count = 0;
int a = 0;
while ((a = str1.IndexOf(pattern, a)) != -1) {
a += pattern.Length;
count++;
}
return count;
}
}실행 결과
Occurrence:2
"Hello World! Hello!"라는 문자열에서 "Hello"는 총 2번 등장하므로 결과값으로 2가 출력됩니다.
마무리 및 참고 사항
이 방법은 간단하고 효율적이지만, 몇 가지 유의할 점이 있습니다.
- 대소문자 구분: IndexOf는 기본적으로 대소문자를 구분합니다. 대소문자를 무시하려면
str1.IndexOf(pattern, a, StringComparison.OrdinalIgnoreCase)처럼 StringComparison 옵션을 사용하세요. - 부분 일치 주의: 이 코드는 단순 부분 문자열 검색이므로, "HelloWorld" 안의 "Hello"도 카운트됩니다. 완전한 단어 단위로 세려면 정규식(Regex)이나 Split 후 비교하는 방식을 고려하는 것이 좋습니다.
핵심 원리는 IndexOf의 시작 위치 매개변수를 활용해 검색 지점을 계속 앞으로 이동시키는 것입니다. 이 패턴을 익혀두면 텍스트 검색 관련 다양한 문제를 손쉽게 해결할 수 있습니다.