C#에서 문자열의 일부분을 추출할 때 가장 많이 사용하는 함수가 바로 Substring()입니다.
하지만 처음 사용할 때 가장 많이 하는 실수가 하나 있습니다.
바로 두 번째 인자를 '끝 인덱스'로 착각하는 것입니다.
예를 들어 문자열에서 인덱스 s부터 인덱스 e까지의 글자를 가져오고 싶다고 가정해 봅시다.
string text = "HelloWorld";
int s = 2; // 시작 인덱스
int e = 4; // 끝 인덱스 (목표: "llo")
// ❌ 잘못된 사용
string result = text.Substring(s, e);
// 의도: 2번부터 4번 인덱스까지 가져와라.
// 실제 동작: 2번 인덱스부터 '4글자'를 가져와라! ("lloW"가 나옴)
Substring 함수의 정확한 시그니처는 Substring(int startIndex, int length)입니다.
즉, 시작 위치와 가져올 글자의 개수(길이)를 넣어줘야 합니다.
시작 인덱스(s)와 끝 인덱스(e)를 알고 있다면, 가져올 길이는 아주 간단한 공식으로 구할 수 있습니다.
가져올 길이 = 끝 인덱스 - 시작 인덱스 + 1
+1을 할까요?인덱스 2번부터 4번까지 가져온다고 할 때, 손가락으로 세어보면 2, 3, 4번 총 3글자입니다.
수식으로 4 - 2를 하면 2가 나오기 때문에, 양끝을 모두 포함하기 위해 반드시 +1을 해줘야 합니다.
이제 공식을 적용하여 코드를 수정해 보겠습니다.
string text = "HelloWorld";
int s = 2; // 시작 인덱스 (문자 'l')
int e = 4; // 끝 인덱스 (문자 'o')
// ⭕ 올바른 사용: (e - s + 1) 로 길이를 계산해서 넣는다!
string result = text.Substring(s, e - s + 1);
Console.WriteLine(result);
// 출력 결과: "llo" (인덱스 2, 3, 4 정확히 추출)
Substring(s, l)에서 두 번째 인자는 끝나는 위치가 아니라 추출할 글자의 개수(길이)다.s)와 끝 인덱스(e)가 주어졌다면, 두 번째 인자에는 (e - s + 1)을 계산해서 넣어야 한다!