1. 들어가기
실제로 문자열로 제일 많이 하는 작업들은 이런 것들이야:
- 문자열 길이 구하기(그리고 비어있는지 확인하기).
- 대소문자 바꾸기(전부 대문자나 전부 소문자로 만들기).
- 문자열에 특정 단어나 문자가 들어있는지 찾기.
- "나쁜 단어"를 더 괜찮은 걸로 바꾸기.
- 구분자 기준으로 문자열 나누기("전화번호 리스트를 콤마로 구분" 같은 거).
- 문자열 앞뒤 공백 제거하기.
- 문자열 일부만 뽑아오기(예: 성의 앞 3글자).
- 두 문자열이 대소문자 무시하고 같은지 비교하기.
이런 작업마다 string 클래스에 딱 맞는 메서드가 있어.
주요 메서드 표
| 작업 | 메서드/속성 | 예시 |
|---|---|---|
| 문자열 길이 | |
|
| 첫 번째 문자 | |
|
| 마지막 문자 | |
|
| 소문자로 변환 | |
|
| 대문자로 변환 | |
|
| 부분 문자열 있는지 확인 | |
|
| 부분 문자열 위치 | |
|
| 문자열 일부 추출 | |
|
| 문자열 비교 | |
|
| 공백 제거 | |
|
| 구분자로 나누기 | |
|
| 배열을 문자열로 합치기 | |
|
| 일부 교체 | |
|
| 빈 문자열? | |
|
오늘은 이 중에서 몇 개만 자세히 볼 거야.
2. 문자열을 배열처럼 다루기
문자열 길이: Length 속성
제일 간단한 건 문자열에 문자가 몇 개인지 알아내는 거야. 이럴 땐 Length 속성을 써. 예시:
string name = "Аркадий";
Console.WriteLine(name.Length); // 출력: 7
- Length는 속성이야(메서드 아님), 그래서 괄호 필요 없어.
- 문자열이 비어있으면("") 길이는 0이야.
가끔은 뭔가 "위험한" 작업(예: 부분 문자열 뽑기) 하기 전에 길이부터 체크하는 게 좋아.
인덱스로 문자 얻기: 인덱서 [i]
배열 다루는 거랑 똑같아: 문자열은 문자들의 배열이거든. 예시:
string hello = "Привет";
char firstChar = hello[0]; // 'П'
char lastChar = hello[^1]; // 'т'
Console.WriteLine(firstChar);
- 인덱스는 0부터 시작이야!
- 조심해: 없는 인덱스(hello[100])에 접근하면 예외가 터져.
3. 문자열 비교
연산자 == 와 !=
C#에서는 이 연산자들이 그냥 두 문자열의 내용을 비교해.
string word1 = "Hello";
string word2 = "Hello";
bool areEqual = word1 == word2; // true
Equals 메서드
== 연산자랑 다르게, Equals 메서드는 파라미터를 줄 수 있어. 예를 들어, 대소문자 무시하고 비교할 때 — "Мама" == "мама" 그리고 "МАМА"도 같게. 예시:
string pass1 = "Qwerty";
string pass2 = "qwerty";
// 기본 비교(대소문자 구분)
bool isSame = pass1.Equals(pass2); // false
// 대소문자 무시하고 비교
bool ignoreCase = pass1.Equals(pass2, StringComparison.OrdinalIgnoreCase); // true
4. 대소문자 변환
문자열을 전부 대문자(혹은 소문자)로 바꾸고 싶으면 string 클래스에 ToLower()랑 ToUpper()라는 메서드가 있어.
예를 들어, 사용자한테 "중요!" 같은 느낌을 주고 싶거나, 비교를 위해 이름을 전부 소문자로 바꾸고 싶을 때 이렇게 해:
string text = "Мне Не Страшен Серый Волк!";
Console.WriteLine(text.ToUpper()); // МНЕ НЕ СТРАШЕН СЕРЫЙ ВОЛК!
Console.WriteLine(text.ToLower()); // мне не страшен серый волк!
- 참고: 원래 문자열은 안 바뀌어!
- 대소문자 무시하고 비교할 때 써도 좋아.
5. 불필요한 공백 제거
만약 사용자가 실수로(아니면 일부러, 누가 알겠어) 이름 앞뒤에 공백을 넣었다면? Trim이 도와줄 거야! 이건 세 가지 버전이 있어:
- Trim — 문자열 앞뒤 모든 공백 제거;
- TrimStart — 앞쪽 공백만 제거;
- TrimEnd — 뒤쪽 공백만 제거.
string raw = " Гоша ";
string cleaned = raw.Trim(); // "Гоша"
Console.WriteLine($"[{cleaned}]");
6. 부분 문자열 얻기: Substring
가끔 문자열에서 일부만 뽑아야 할 때가 있어.
string word = "Привет";
string part = word.Substring(2); // "ивет"
string part2 = word.Substring(2, 3); // "иве"
- Substring(startIndex) — startIndex부터 끝까지.
- Substring(startIndex, length) — startIndex부터 length만큼.
주의: 문자열 범위를 벗어나거나 length < 0이면 예외가 나와!
7. 문자열이 비었는지 확인
문자열을 쓰기 전에(예: 보간할 때) null이거나 비어있는지 체크하는 게 좋아. 안 그러면 에러나 이상한 결과가 나올 수 있어.
a) null 체크: == 연산자
string s = null;
if (s == null)
Console.WriteLine("문자열이 null이야");
단점: 빈 문자열("")은 못 잡아.
b) string.IsNullOrEmpty()로 체크
null이랑 빈 문자열 둘 다 체크해:
string s = "";
if (string.IsNullOrEmpty(s))
Console.WriteLine("문자열이 비었거나 null이야");
c) string.IsNullOrWhiteSpace()로 체크
공백, 탭 등 "안 보이는" 문자만 있는 문자열도 같이 잡아줘:
string s = " ";
if (string.IsNullOrWhiteSpace(s))
Console.WriteLine("문자열이 비었거나, null이거나, 공백만 있어");
8. 문자열 메서드 쓸 때 흔한 실수
- 제일 흔한 건 문자열이 불변(immutable)이라는 걸 까먹는 거야. 위에서 이미 얘기했지.
- 또 많이 하는 실수는 비교나 찾을 때 대소문자 구분을 신경 안 쓰는 거야.
예를 들어, 사용자가 "андрей"라고 입력했는데 리스트엔 이미 "Андрей"가 있으면, 그냥 Contains나 ==만 쓰면 안 맞을 수 있어. 둘 다 같은 대소문자로 바꾸거나, 메서드 오버로드를 써야 해.
그리고 인덱스를 반환하는 메서드 쓸 때도 조심! 인덱스는 0부터 시작이고, -1이 나오면 "못 찾았다"는 뜻이지, "인덱스 0"이 아니야.
GO TO FULL VERSION