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

C# String.IndexOf() 메서드 완벽 정리 – 문자열에서 특정 문자 위치 찾기

C#의 String.IndexOf() 메서드는 지정한 유니코드 문자 또는 부분 문자열이 현재 문자열 인스턴스 내에서 처음으로 나타나는 위치(0부터 시작하는 인덱스)를 반환합니다. 만약 찾고자 하는 값이 존재하지 않으면 -1을 반환하기 때문에, 단순히 위치를 찾는 것뿐만 아니라 특정 문자열의 포함 여부를 판별하는 용도로도 널리 활용됩니다.

문법(Syntax)

기본 문법은 다음과 같습니다.

public int IndexOf(string val);

매개변수 − val: 현재 문자열 안에서 찾고자 하는 문자열입니다.

반환값 − 해당 문자열이 처음 발견되는 0 기반 인덱스를 반환하며, 찾지 못할 경우 -1을 반환합니다.

참고로 IndexOf()는 다양한 오버로드를 제공합니다. 시작 위치를 지정하는 IndexOf(string, int startIndex), 대소문자 비교 규칙을 지정하는 IndexOf(string, StringComparison) 등 상황에 맞게 선택하여 사용할 수 있습니다.

예제 1: 문자 'o'의 인덱스 찾기

두 개의 문자열에서 문자 'o'가 처음 등장하는 인덱스를 구하고, Contains() 결과도 함께 확인해 보겠습니다.

using System;
public class Demo {
    public static void Main(String[] args) {
        string str1 = "Jacob";
        string str2 = "John";
        Console.WriteLine("String 1 = "+str1);
        Console.WriteLine("HashCode of String 1 = "+str1.GetHashCode());
        Console.WriteLine("Index of character 'o' is str1 = " + str1.IndexOf("o"));
        Console.WriteLine("\nString 2 = "+str2);
        Console.WriteLine("HashCode of String 2 = "+str2.GetHashCode());
        Console.WriteLine("Index of character 'o' is str2 =" + str2.IndexOf("o"));
        bool res = str1.Contains(str2);
        if (res)
            Console.WriteLine("Found!");
        else
            Console.WriteLine("Not found!");
    }
}

출력 결과

String 1 = Jacob
HashCode of String 1 = -790718923
Index of character 'o' is str1 = 3
String 2 = John
HashCode of String 2 = -1505962600
Index of character 'o' is str2 =1
Not found!

결과 분석

  • "Jacob"에서 문자 'o'(J-a-c-o-b)의 첫 번째 위치는 인덱스 3입니다.
  • "John"에서 문자 'o'(J-o-h-n)의 첫 번째 위치는 인덱스 1입니다.
  • str1("Jacob")에는 str2("John")가 포함되어 있지 않으므로 Contains()가 false를 반환하여 "Not found!"가 출력됩니다.

예제 2: 대소문자가 일치하지 않는 경우

이번에는 찾으려는 문자의 대소문자가 원본 문자열과 일치하지 않을 때 어떻게 동작하는지 살펴보겠습니다.

using System;
public class Demo {
    public static void Main(String[] args) {
        string str1 = "Kevin";
        string str2 = "Evin";
        Console.WriteLine("String 1 = "+str1);
        Console.WriteLine("HashCode of String 1 = "+str1.GetHashCode());
        Console.WriteLine("Index of character 'k' in str1 = " + str1.IndexOf("k"));
        Console.WriteLine("\nString 2 = "+str2);
        Console.WriteLine("HashCode of String 2 = "+str2.GetHashCode());
        Console.WriteLine("Index of character 'k' in str2 =" + str2.IndexOf("k"));
        bool res = str1.Contains(str2);
        if (res)
            Console.WriteLine("Found!");
        else
            Console.WriteLine("Not found!");
    }
}

출력 결과

String 1 = Kevin
HashCode of String 1 = -768104063
Index of character 'k' in str1 = -1
String 2 = Evin
HashCode of String 2 = 1223510568
Index of character 'k' in str2 =-1
Not found!

결과 분석

  • "Kevin"에는 대문자 'K'만 존재하므로 소문자 'k'를 검색하면 일치하는 문자가 없어 -1이 반환됩니다.
  • 즉, IndexOf()는 기본적으로 대소문자를 구분(case-sensitive)한다는 점에 유의해야 합니다.
  • 대소문자를 구분하지 않고 검색하려면 str1.IndexOf("k", StringComparison.OrdinalIgnoreCase)처럼 StringComparison 옵션을 함께 사용하면 됩니다.

정리

String.IndexOf()는 문자열 검색의 기본이 되는 메서드로, 찾는 값의 첫 번째 위치를 0 기반 인덱스로 반환하고 없으면 -1을 반환합니다. 대소문자 구분 여부와 시작 인덱스 지정 등 오버로드 옵션을 잘 활용하면 더욱 유연한 문자열 처리가 가능합니다.