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을 반환합니다. 대소문자 구분 여부와 시작 인덱스 지정 등 오버로드 옵션을 잘 활용하면 더욱 유연한 문자열 처리가 가능합니다.