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 형식에서는 다양한 멤버들을 제공하고 있으니 사용해 보시기 바랍니다.