CodeGym /행동 /C# SELF /string 클래스의 고급 메서드

string 클래스의 고급 메서드

C# SELF
레벨 9 , 레슨 4
사용 가능

1. 문자열에서 서브스트링 찾기

지난 강의에서 문자열에서 서브스트링을 뽑는 법을 배웠지. 이번엔 한 문자열 안에서 다른 문자열을 찾는 법을 배울 거야. 이걸 위해 쓸 수 있는 멋진 메서드 5개가 있어:

Contains 메서드: 문자열에 서브스트링이 포함되어 있나?

이 메서드는 네가 넘긴 문자열이 호출한 문자열 안에 있으면 true를 리턴해.

string phrase = "변화의 바람";
bool hasWord = phrase.Contains("변화"); // true
Contains로 서브스트링이 있는지 확인하기

대소문자 구분함! "바람".Contains("Б")false.

IndexOf 메서드: 서브스트링 위치 찾기

배열에서 IndexOf 쓰는 거랑 비슷해: 문자열에서(앞에서 뒤로) 서브스트링을 찾아서 첫 번째로 나오는 위치의 인덱스를 리턴해.

string text = "수박수박";
int index = text.IndexOf("박"); // 2
IndexOf로 서브스트링 위치 찾기
  • 못 찾으면 -1을 리턴해.
  • 시작 위치를 지정할 수도 있어: IndexOf("박", 4). 배열이랑 똑같아.

LastIndexOf 메서드: 마지막 등장 위치

이것도 배열에서 LastIndexOf 쓰는 거랑 비슷해: 문자열에서(뒤에서 앞으로) 서브스트링을 찾아서 마지막으로 나오는 위치의 인덱스를 리턴해.

string repeated = "문제 문제";
int last = repeated.LastIndexOf("문제"); // 7
LastIndexOf로 마지막 서브스트링 위치 찾기

문자열이 특정 서브스트링으로 시작/끝나는지 확인

문자열이 특정 서브스트링으로 시작하거나 끝나는지 확인하고 싶을 때도 많아. 이럴 때 쓸 수 있는 메서드 두 개:

  • StartsWith — 문자열이 특정 서브스트링으로 시작하는지 확인해;
  • EndsWith — 문자열이 특정 서브스트링으로 끝나는지 확인해.
string fileName = "photo.jpg";
bool isJpg = fileName.EndsWith(".jpg"); // true

string email = "support@company.com";
bool isSupport = email.StartsWith("support"); // true
문자열 시작과 끝 확인하기

대소문자 구분 없이 비교하고 싶으면, 비교 모드를 추가 파라미터로 넘겨야 해 (자세한 건 StringComparison.OrdinalIgnoreCase 문서 참고).

2. Replace 메서드: 문자와 서브스트링 바꾸기

Replace 메서드는 문자열 A의 모든 등장 부분을 문자열 B로 바꿔줘. 오타, 검열, 템플릿에서 변수 바꿀 때 쓰라고 나온 거지! (농담이야.)

string address = "런던, 베이커가";
string updated = address.Replace("런던", "파리");
Console.WriteLine(updated); // "파리, 베이커가"
Replace로 서브스트링 바꾸기
  • 한 글자만 바꿀 수도 있어: str.Replace('а', 'я')
  • 중요: 모든 등장 부분이 다 바뀌고, 첫 번째 것만 바뀌는 게 아니야.

3. Split 메서드: 문자열을 조각내기

Split 메서드는 네 문자열을 잘라서 구분자 (문자나 문자열) 기준으로 쪼개. 그리고 쪼갠 결과를 문자열 배열로 리턴해.

string[] parts = originalString.Split(separator);
Split 메서드 문법
  • separator — 구분자로 쓸 문자나 문자 배열이야.

가장 간단한 예시

공백 기준으로 문자열을 나눠보자:

string input = "사과 배 오렌지 바나나";
string[] fruits = input.Split(' '); 	// ["사과","배","오렌지","바나나"] 배열이 됨
Console.WriteLine(fruits[0]); 			// "사과"
Console.WriteLine(fruits[1]); 			// "배"

이렇게 하면 길이 4짜리 문자열 배열이 나오고, 각 단어가 배열의 한 요소가 돼.

구분자가 여러 개일 때

가끔 문자열에 구분자가 하나만 있는 게 아닐 수도 있어. 예를 들어, 사용자가 공백, 쉼표, 세미콜론으로 값을 입력했을 수도 있지.

이럴 땐 구분자 문자 배열을 쓸 수 있어:

string input = "사과, 배; 오렌지 바나나";
char[] separators = { ' ', ',', ';' };
string[] fruits = input.Split(separators, StringSplitOptions.RemoveEmptyEntries);

보너스: StringSplitOptions.RemoveEmptyEntries 옵션을 쓰면 빈 조각을 빼줘. 사용자가 구분자를 여러 번 연속으로 썼을 때 — 예를 들어, 공백 두 번이나 "사과,, 배" 같은 경우에 유용해.

서브스트링으로 나누기

구분자가 문자뿐 아니라 문자열일 수도 있어. 예를 들어, CSV 파일에서 구분자가 ";"|일 때:

// 한 글자 구분자
string data = "이바노프;페트로프;시도로프";
string[] names = data.Split(';'); // ';'로 나눔

// 구분자가 문자열일 때:
string log = "2024-01-01::오류::작업을 완료하지 못함";
string[] separators = { "::" };
string[] parts = log.Split(separators);

4. Join 메서드: 문자열 배열 다시 합치기

Join 메서드는 반대로, 문자열 배열을 하나로 합쳐주고, 각 요소 사이에 네가 고른 구분자를 넣어줘.

string result = string.Join(separator, arrayOfStrings);
Join 메서드 문법
  • separator — 각 요소 사이에 들어갈 문자열이야.
  • arrayOfStrings — 문자열 배열이나 컬렉션 (string[], List<string> 등).

가장 간단한 예시

문자열 배열을 콤마로 이어서 하나의 문자열로 만들어보자:

string[] items = { "사과", "배", "오렌지", "바나나" };
string joined = string.Join(", ", items);
Console.WriteLine(joined); // "사과, 배, 오렌지, 바나나"
Join으로 문자열 배열 합치기

빈 구분자로 합치기 — 문자열을 그냥 이어붙이기

가끔은 그냥 문자열들을 쭉 이어붙이고 싶을 때도 있지:

string[] parts = { "나", "는", "C#" };
string message = string.Join("", parts);
Console.WriteLine(message); // "나는C#"
구분자 없이 문자열 합치기

5. 흔한 실수들

초보 개발자들이 자주 하는 실수 중 하나가 Split으로 문자열을 나눈 뒤에 남는 공백을 안 지우는 거야. 예를 들어, 사용자가 "사과, 배 ,바나나"라고 입력하면 Split 결과가 " 배 " 같은 요소가 나와. 바로 숫자로 변환하거나 비교하면 버그가 생길 수 있어. Split 후에 각 요소마다 Trim()을 써주는 게 좋은 습관이야.

두 번째는 빈 문자열 문제. 사용자가 구분자를 두 번 연속 쓰거나, 문자열 처음이나 끝에 구분자가 있으면 Split이 빈 요소를 리턴할 수 있어. StringSplitOptions.RemoveEmptyEntries를 꼭 써서 에러를 막자.

Join에 넘기는 배열에 빈 요소나 null이 있으면 Join은 그냥 무시해. 근데 만약 보고서 등에서 누락된 값도 보여야 한다면, 배열을 직접 처리해줘야 해.

그리고 또: Split은 원본 문자열을 절대 바꾸지 않고, 새 배열을 리턴해. Join도 원본 배열을 바꾸지 않고, 새 문자열을 만들어줘. 기억해: C#에서 문자열과 배열은 immutable (불변)이야.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION