[C#] 3.4 string

C#에서는 문자열을 string 형식으로 제공하고 있으며 이는 .NET Framework에서 제공하는 System.String 형식을 C#에서 부르는 형식 이름입니다. string은 참조 형식임에도 값 형식처럼 사용할 수 있습니다.

string 개체를 생성하는 방법은 여러 가지가 있습니다. 그중에서 자주 사용되는 몇 가지를 나열한다면 다음과 같습니다.

▶string 개체 생성하는 방법

string s1; 
s1 = "hello";

string s2 = "yahoo";

char[] chArr = new char[] { 'a', 'b', 'c' ,'d','e','f'};
string s3 = new string(chArr);

string s4 = new string(chArr, 2, 3);
string s5 = new string('a', 4);

string 형식의 변수를 선언하고 초기화하지 않으면 null을 기본값으로 갖습니다. string 형식의 변수를 선언할 때 초기화를 하지 않는 것은 많은 응용 개발 시에 논리적 버그가 발생하여 개발 비용이 늘어나는 원인이 될 수 있습니다. 될 수 있으면 string 형식의 변수는 선언과 동시에 초기화를 해 주시기 바랍니다. 마땅히 초기화할 값이 없을 때는 string 클래스의 정적 멤버인 Empty를 사용하시기 바랍니다.

string str = string.Empty;

string 형식에서는 == 연산자와 != 연산자는 값 형식처럼 문자 컬렉션이 같은지를 판단합니다.

▶ string 형식의 ==연산자와 != 연산자

char[] chArr = new char[] { 'a', 'b', 'c', 'd', 'e', 'f' };
string str1 = new string(chArr);
string str2 = new string(chArr);
Console.WriteLine(str1 == str2);
Console.WriteLine(string.ReferenceEquals(str1, str2));

▶ 실행 결과

True
False

위의 코드를 실행하면 str1==str2의 결과가 True입니다. 실제 str1과 str2는 서로 다른 개체임에도 컬렉션 내용이 같은지를 가지고 판단하기 때문입니다. 물론, 참조하는 개체를 비교하는 string.ReferenceEquals 메서드를 호출한 결과는 False입니다.

string의 다른 비교 연산자들(<, <=, >, >=)은 제공하지 않습니다. 대신 멤버 메서드로 CompareTo를 제공함으로써 이를 대신할 수 있습니다.

int differnece = str1.CompareTo(str2);

string은 + 연산자를 사용하여 단일 문자열을 만들 수 있습니다.

string s1 = "hello";
string s2 = "yahoo";
string s3 = s1 + " " + s2+ " abc";

특정 포맷에 맞는 문자열을 만들고자 한다면 string 클래스의 정적 메서드인 Format을 사용하면 됩니다.

string str = string.Format("이름:{0,-5} 나이:{1,10}", "홍길동", 23);

이 외에도 string에는 다양한 멤버들을 제공하고 있어 다양한 작업을 할 수 있습니다.

다음은 문자열을 수정할 때 사용되는 메서드의 예제 코드입니다. 각 메서드에서는 원하는 작업을 수행한 결과 문자열을 반환하며 원본 문자열은 바뀌지 않습니다.

▶ 문자열 수정

string s = "   ab  cde";
Console.WriteLine(s.Insert(3, "EHCLUB")); //부분 문자열 삽입

//문자열 길이가 최소 10이 될 수 있게 앞쪽에 공백 추가
Console.WriteLine(s.PadLeft(10));
//문자열 길이가 최소 10이 될 수 있게 앞쪽에 '*' 추가
Console.WriteLine(s.PadLeft(10, '*'));

//문자열 길이가 최소 10이 될 수 있게 뒤쪽에 공백 추가
Console.WriteLine(s.PadRight(10)); 
//문자열 길이가 최소 10이 될 수 있게 뒤쪽에 '*' 추가
Console.WriteLine(s.PadRight(10, '*'));

Console.WriteLine(s.Remove(2));     //인덱스 2부터 부분 문자열 제거
Console.WriteLine(s.Remove(2, 2));  //인덱스 2부터 2개의 부분 문자 제거

//소문자를 대문자로 변경 (ToLower는 대문자를 소문자로 변경)
Console.WriteLine(s.ToUpper());
Console.WriteLine(s.Trim());     //문자열 앞쪽과 뒤쪽에 있는 공백을 제거

▶ 실행 결과

EHCLUBab  cde
   ab  cde
   ab  cde
   ab  cde
   ab  cde
  
  b  cde
   AB  CDE
ab  cde

string에서는 부분 문자열이 존재 여부를 확인하기 위한 메서드들과 위치를 찾아주는 메서드들을 통해 검색에 편의성을 제공하고 있습니다.

▶ 부분 문자열 검색

string str = "I am a boy. You are a girl.";
Console.WriteLine(str.Contains("boy"));           //부분 문자열 포함 여부
Console.WriteLine(str.EndsWith("girl."));          //문자열 끝 부분 비교
Console.WriteLine(str.StartsWith("You"));         //문자열 시작 부분 비교
Console.WriteLine(str.IndexOf('.').ToString());    //특정 문자가 처음 발견되는 인덱스 반환

//특정 문자열이 처음 발견되는 인덱스 반환
Console.WriteLine(str.IndexOf("You").ToString());

//특정 문자가 뒤에서 처음 발견되는 인덱스 반환
Console.WriteLine(str.LastIndexOf('a').ToString());

//특정 문자열이 뒤에서 처음 발견되는 인덱스 반환
Console.WriteLine(str.LastIndexOf(" a").ToString()); 

이 외에도 string 형식에서는 다양한 멤버들을 제공하고 있으니 사용해 보시기 바랍니다.