Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 문자열에서 특정 단어의 등장 횟수 계산하기

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의 시작 위치 매개변수를 활용해 검색 지점을 계속 앞으로 이동시키는 것입니다. 이 패턴을 익혀두면 텍스트 검색 관련 다양한 문제를 손쉽게 해결할 수 있습니다.