C# 문자열 마스터하기: 모범 사례와 핵심 팁 총정리
C#에서 문자열은 문자 배열로 사용할 수 있지만, 더 일반적인 방법은 string 키워드를 사용하여 문자열 변수를 선언하는 것입니다. string 키워드는 System.String 클래스의 별칭(alias)입니다.
문자열 객체 생성 방법
다음 방법들로 문자열 객체를 생성할 수 있습니다.
- 문자열 리터럴을 String 변수에 할당
- String 클래스 생성자 사용
- 문자열 연결 연산자(
+) 사용
- 문자열을 반환하는 속성 조회 또는 메서드 호출
- 서식 지정 메서드로 값/객체를 문자열 표현으로 변환
종합 예제
using System;
namespace StringApplication
{
class Program
{
static void Main(string[] args)
{
// 1. 문자열 리터럴과 연결 연산자
string fname = "Rowan";
string lname = "Atkinson";
string fullname = fname + lname;
Console.WriteLine("Full Name: {0}", fullname); // RowanAtkinson
// 2. 문자 배열로 생성자 호출
char[] letters = { 'H', 'e', 'l', 'l', 'o' };
string greetings = new string(letters);
Console.WriteLine("Greetings: {0}", greetings); // Hello
// 3. 메서드 반환 문자열 (Join)
string[] sarray = { "Hello", "From", "Tutorials", "Point" };
string message = String.Join(" ", sarray);
Console.WriteLine("Message: {0}", message); // Hello From Tutorials Point
// 4. 서식 지정 메서드 (Format)
DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
string chat = String.Format("Message sent at {0:t} on {0:D}", waiting);
Console.WriteLine("Message: {0}", chat);
// Message sent at 5:58 PM on Wednesday, October 10, 2012
}
}
}
String 클래스 속성
| 번호 | 속성 및 설명 |
| 1 | Chars 현재 String 객체의 지정된 위치에 있는 Char 객체를 가져옵니다. (인덱서로 str[i] 사용 가능) |
| 2 | Length 현재 String 객체의 문자 수를 가져옵니다. |
String 클래스 주요 메서드
String 클래스는 문자열 작업을 돕는 수많은 메서드를 제공합니다. 가장 자주 사용되는 메서드들을 정리했습니다.
| 번호 | 메서드 및 설명 |
| 1 | Compare(strA, strB) - 두 문자열 비교, 정렬 순서상 상대 위치 반환 |
| 2 | Compare(strA, strB, ignoreCase) - 대소문자 무시 옵션 포함 비교 |
| 3 | Concat(str0, str1) - 두 문자열 연결 |
| 4 | Concat(str0, str1, str2) - 세 문자열 연결 |
| 5 | Concat(str0, str1, str2, str3) - 네 문자열 연결 |
| 6 | Contains(value) - 지정된 문자열이 포함되는지 확인 (bool) |
| 7 | Copy(str) - 지정된 문자열과 같은 값의 새 String 객체 생성 |
| 8 | CopyTo(sourceIndex, dest, destIndex, count) - 문자 복사 |
| 9 | EndsWith(value) - 지정된 문자열로 끝나는지 확인 |
| 10 | Equals(value) - 현재 문자열과 지정된 문자열 값이 같은지 확인 |
| 11 | Equals(a, b) - 두 문자열 값이 같은지 정적 메서드로 확인 |
| 12 | Format(format, arg0) - 서식 항목을 객체의 문자열 표현으로 치환 |
| 13 | IndexOf(char) - 지정된 문자의 첫 번째 출현 인덱스 반환 |
| 14 | IndexOf(string) - 지정된 문자열의 첫 번째 출현 인덱스 반환 |
| 15 | IndexOf(char, startIndex) - 지정된 위치부터 문자 검색 |
| 16 | IndexOf(string, startIndex) - 지정된 위치부터 문자열 검색 |
| 17 | IndexOfAny(char[]) - 배열의 아무 문자나 처음 나오는 위치 |
| 18 | IndexOfAny(char[], startIndex) - 지정된 위치부터 위 검색 |
| 19 | Insert(startIndex, value) - 지정된 위치에 문자열 삽입하여 새 문자열 반환 |
| 20 | IsNullOrEmpty(value) - null 또는 빈 문자열인지 확인 (정적) |
| 21 | Join(separator, params string[]) - 구분자로 문자열 배열 요소 연결 |
| 22 | Join(separator, string[], startIndex, count) - 지정된 요소만 연결 |
| 23 | LastIndexOf(char) - 지정된 문자의 마지막 출현 인덱스 |
| 24 | LastIndexOf(string) - 지정된 문자열의 마지막 출현 인덱스 |
| 25 | Remove(startIndex) - 지정된 위치부터 끝까지 제거 |
| 26 | Remove(startIndex, count) - 지정된 위치부터 지정된 개수만큼 제거 |
| 27 | Replace(oldChar, newChar) - 모든 구문자/문자열 치환하여 새 문자열 반환 |
| 28 | Replace(oldValue, newValue) - 모든 부분 문자열 치환 |
| 29 | Split(params separator[]) - 구분자로 분할하여 문자열 배열 반환 |
| 30 | Split(separator, count) - 최대 부분 문자열 수 제한 분할 |
| 31 | StartsWith(value) - 지정된 문자열로 시작하는지 확인 |
| 32 | ToCharArray() - 유니코드 문자 배열로 변환 |
| 33 | ToCharArray(startIndex, length) - 지정된 범위를 문자 배열로 변환 |
| 34 | ToLower() - 소문자로 변환한 복사본 반환 |
| 35 | ToUpper() - 대문자로 변환한 복사본 반환 |
| 36 | Trim() - 앞뒤 공백 문자 제거 |
참고: 전체 메서드 목록은 Microsoft 공식 문서(MSDN)를 참조하세요.
실전 예제
문자열 비교
string str1 = "This is test";
string str2 = "This is text";
if (String.Compare(str1, str2) == 0)
Console.WriteLine("같음");
else
Console.WriteLine("다름"); // 출력: 다름
문자열 포함 여부 확인
string str = "This is test";
if (str.Contains("test"))
Console.WriteLine("'test' 시퀀스가 발견됨."); // 출력됨
부분 문자열 추출 (Substring)
string str = "Last night I dreamt of San Pedro";
Console.WriteLine(str); // 원본 출력
string substr = str.Substring(23); // 23번 인덱스부터 끝까지
Console.WriteLine(substr); // San Pedro
문자열 배열 연결 (Join)
string[] starray = {
"Down the way nights are dark",
"And the sun shines daily on the mountain top",
"I took a trip on a sailing ship",
"And when I reached Jamaica",
"I made a stop"
};
string str = String.Join("\n", starray);
Console.WriteLine(str);
성능 팁: 반복적인 문자열 연결 시 StringBuilder 클래스(System.Text)를 사용하세요. string은 불변(immutable)이라 연결할 때마다 새 객체가 생성됩니다.