Dim st As String st = "Hello" st += " World!"그렇지만 닷넷에서 일단 한번 생성된 문자열은 변경될 수 없기 때문에(immutable) 위와 같은 코드는 권장되지 않는 문자열 조작 방법이다. 닷넷은 실행중에 문자열이 변경되면 새로운 문자열 객체를 생성한다. 위 예제에서는 두 개의 문자열 객체가 생성되는데 첫번째는 "Hello"와 같이 문자열이 초기화 될 때 이며, 다른 하나는 문자열을 합칠 때이다.
Dim str As New StringBuilder("This is a string") Dim aString As String aString = str.ToString Console.WriteLine(aString)이제부터는 일반적인 문자열을 처리하기 위해 StringBuilder 클래스의 다양한 메소드와 속성을 사용하는 방법에 대해 소개할 것이다.
'---Appending a string str.Append(" created using StringBuilder.") Console.WriteLine(str)위 코드를 실행한 결과는 다음과 같다.
This is a string created using StringBuilder.AppendFormat() 메소드를 사용하면 이어 붙일 텍스트에 적절한 형식을 지정할 수 있다. 여기서는 StringBuilder 객체에 현재 날짜를 추가하기 위해 ShortDatePattern을 사용하여 날짜의 출력 형식을 제어하였다.
'---Appending with format str.AppendFormat("{0}:{1:d}", " Created on ", Today) Console.WriteLine(str)위 코드를 실행한 결과는 아래와 같다.
This is a string created using StringBuilder. Created on :7/14/2003
문자열 삽입하기
문자열을 삽입하기 위해서는 Insert() 메소드를 사용한다.'---Inserting a string str.Insert(0, "VB.NET : ") ' 기존 문자열 앞에 문자를 삽입한다. Console.WriteLine(str)위 코드를 실행한 결과는 다음과 같다.VB.NET : This is a string created using StringBuilder. Created on :7/14/2003문자열 바꾸기
Replace() 메소드를 사용해서 문자열을 바꾼다.'---문자열 바꾸기 '-- 대소문자를 구분한다. str.Replace("VB.NET", "C#") ' replace VB.NET with C# Console.WriteLine(str)위 코드를 실행한 결과는 다음과 같다.C# : This is a string created using StringBuilder. Created on :7/14/2003문자열 내의 각 문자의 순서를 나타내는 색인과 Chars() 속성을 사용하여 문자열을 바꾸는 것도 가능하다.'---한 문자만 바꾸기 str.Chars(0) = "c" ' 첫번째 문자를 "c"로 변경한다. Console.WriteLine(str)위 코드를 실행한 결과는 다음과 같다.c# : This is a string created using StringBuilder. Created on :7/14/2003문자열 일부를 제거하기
문자열 일부를 제거하려면 Remove() 메소드를 사용한다.'---문자열 제거하기 str.Remove(0, 5) ' 첫번째 글자부터 시작해서 5개의 문자를 삭제한다. Console.WriteLine(str)위 코드를 실행한 결과는 다음과 같다.This is a string created using StringBuilder. Created on :7/14/2003단어의 위치 찾기
문자열 내에서 특정 단어의 위치를 찾을 경우에는 ToString() 메소드와 함께 IndexOf() 메소드를 사용할 수 있다. 단어를 찾을 수 없다면 -1을 반환한다.'---단어가 처음으로 일치하는 부분을 찾기 Console.WriteLine(str.ToString.IndexOf("i"))위 코드를 실행한 결과는 다음과 같다.2IndexOf() 메소드는 주어진 문자나 문자열과 처음으로 일치되는 위치를 반환하기 때문에 어떤 단어와 일치하는 부분을 모두 찾으려면 IndexOf() 메소드의 오버로드된 버전을 사용해야 하고, 이 코드를 루프 안에서 실행해야 한다. 다음 예제는 문자열에서 단어 "is"를 모두 찾는 예제이다.'---단어와 일치하는 부분을 모두 찾기 '--대소문자 구분함 Dim index As Integer = -1 Do index += 1 index = str.ToString.IndexOf("is", index) If index >= 0 Then Console.WriteLine(index) Loop Until index = -1위 코드를 실행한 결과는 다음과 같다.2 5문자열 나누기
문자열을 여러 개로 나누려면 Split() 메소드와 문자열을 구분할 구분자(separator)를 사용한다.'---문자열 나누기 Dim str1 As New _ StringBuilder("Mango Apple Orange Pineapple Durian") Dim aStr() As String = str1.ToString.Split(" ") ' separator is " " For j As Integer = 0 To aStr.Length - 1 Console.Write(aStr(j) & "-") Next위 코드를 실행한 결과는 다음과 같다.Mango-Peach-Orange-Pineapple-Durian-문자열 덮어쓰기/자르기
StringBuilder 개체에 새로운 문자열을 할당하려면 Remove() 메소드를 사용해서 전체 문자열을 제거한 다음에 Append() 메소드를 사용하면 된다. Length 속성은 문자열의 길이를 반환한다.'---기존 문자열 덮어쓰기 str1.Remove(0, str1.Length) str1.Append("Mango Apple Orange Pineapple Durian") Console.WriteLine(str1)위 코드를 실행한 결과는 다음과 같다.Mango Apple Orange Pineapple Durian위 코드의 두 문장을 다음 예제와 같이 하나의 코드로 결합할 수도 있다.str1.Remove(0, str1.Length).Append("Mango Apple Orange Pineapple Durian") Console.WriteLine(str1)문자열을 할당하는 다른 방법은 StringBuilder 객체의 Length 속성을 0으로 설정한 다음에 Append() 메소드를 사용하는 것이다. Length 속성을 0으로 설정하면 문자열을 제거하는 것과 같다.str1.Length = 0 str1.Append("Mango Apple Orange Pineapple Durian") Console.WriteLine(str1)대부분의 경우, Length 속성은 읽기 전용일거라고 추측했겠지만 실제로는 Length 속성에 실제 문자열 길이보다 작은 값을 할당하면 문자열을 해당 길이만 남기고 자를 수 있다.'---문자열 자르기 str1.Length = 11 Console.WriteLine(str1)위 코드를 실행한 결과는 다음과 같다.Mango Apple문자열 비교하기
문자열 처리 작업 중에 가장 흔히 볼 수 있는 예는 문자열을 비교하는 것이다. 문자열이 동일한지 비교하기 위해 Compare()메소드를 사용한다.'---Comparing strings Dim str2 As New StringBuilder("String 1") Dim str3 As New StringBuilder("String 2") Dim str4 As New StringBuilder("string 1") Console.WriteLine(str2.ToString.Compare(str2.ToString, _ str3.ToString)) Console.WriteLine(str2.ToString.Compare(str2.ToString, _ str4.ToString)) Console.WriteLine(str2.ToString.Compare(str2.ToString, _ str4.ToString, False)) Console.WriteLine(str2.ToString.Compare(str2.ToString, _ str4.ToString, True))위 코드를 실행한 결과는 다음과 같으며 괄호안의 내용은 필자의 설명이다.-1 (str2 < str3) 1 (str3 > str4) 1 (str3 > str4) 0 (str3 = str4)문자열 비교의 기본 설정은 대소문자를 구분하게 되어있다. 문자열 비교를 수행하는 동안 대소문자 구분을 무시하고 싶다면 대소문자 구분 여부를 Boolean 매개변수로 사용하는 오버로드된 버전의 Compare() 메소드를 사용하면 된다. 이 값을 True로 설정하면 대소문자 구분을 무시할 것이다. 기본값은 False로 되어 있다.
vnote