[C#] StringBuilder
StringBuilder
변경이 가능한 문자열을 나타내는 클래스
string 객체는 값이 변경되면 메모리에 새로운 참조 값을 생성하고 이전 참조 값을 버린다.
StringBuilder는 객체의 참조 값을 변경하지 않고 힙 메모리에서 값이 삽입, 추가, 제거될 수 있다.
즉, 문자열을 반복적으로 수정해야하는 경우
객체 생성
StringBuilder 클래스는 System.Text 네임스페이스의 객체이므로 using문에 다음과 같이 System.Text를 추가한다.
using System;
using System.Text;
StringBuilder 개체 인스턴스화
StringBuilder 객체 선언 및 초기화는 일반 객체와 동일하다. 다음은 StringBuilder 객체를 생성과 생성과 초기화를 함께 하는 예제입니다.
// StringBuilder 객체 생성
StringBuilder myStringBuilder = new StringBuilder();
// StringBuilder 객체 생성과 초기화
StringBuilder myStringBuilder2 = new StringBuilder("Init StringBuilder");
용량 및 길이 설정
StringBuilder는 문자 수를 확장할 수 있는 동적 개체이지만 최대 문자 수 값을 지정할 수도 있다. 이 값은 현재 보관된 문자열의 길이와는 다른 개념이다.
"Hello"라는 문자열을 사용하여도 개체 최대 용량을 25로 지정할 수 있는 것이다.
용량에 도달할 때까지 자체 크기를 다시 할당할 수 없다. 이 경우 새공간이 자동으로 할당되며 용량이 두배로 늘어난다.
즉, 크기가 10인 StringBuilder에 11개의 문자열을 넣으려하면 새로운 크기가 20인 StringBuilder를 생성한다는 소리다.
StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
생성자 외에도 Capacity 속성에 접근하여 최대 크기를 변경할 수 있다.
myStringBuilder.Capacity = 25;
EnsureCapacity 메서드를 사용하여 현재 용량을 확인할 수 있다.
Console.WriteLine("Current Capacity : " + myStringBuilder.EnsureCapacity());
Length 속성으로 크기 값을 조절할 수도 있습니다.
Length를 변경하면 Capacity 속성도 동일 값으로 자동 변경된다.
문자열 수정
메서드 명칭 | 기능 |
StringBuilder.Append | 현재 StringBuilder의 끝에 정보를 추가한다. |
StringBuilder.AppendFormat | 문자열에 전달된 서식 지정자를 서식 있는 텍스트로 바꾼다. |
StringBuilder.Insert | 현재 StringBuilder의 지정된 인덱스에 문자열 또는 개체를 삽입한다. |
StringBuilder.Remove | 현재 StringBuilder에서 지정된 수의 문자를 제거한다. |
StringBuilder.Replace | 현재 StringBuilder에서 발견되는 지정된 문자 또는 문자열을 지정된 다른 문자 또는 문자열로 모두 바꾼다. |
문자열 변환
StringBuilder 개체의 문자열은 string 매개 변수를 가진 메서드에 전달하거나 개체 자체를 string 개체로 형변환해야 한다.
가장 흔하게는 StringBuilder.ToString() 메서드를 호출하여 문자열을 출력한다.
using System;
using System.Text;
public class Example
{
public static void Main()
{
StringBuilder sb = new StringBuilder();
bool flag = true;
string[] spellings = { "recieve", "receeve", "receive" };
sb.AppendFormat("Which of the following spellings is {0}:", flag);
sb.AppendLine();
for (int ctr = 0; ctr <= spellings.GetUpperBound(0); ctr++) {
sb.AppendFormat(" {0}. {1}", ctr, spellings[ctr]);
sb.AppendLine();
}
sb.AppendLine();
Console.WriteLine(sb.ToString());
}
}
// The example displays the following output:
// Which of the following spellings is True:
// 0. recieve
// 1. receeve
// 2. receive
참고자료
.NET에서 StringBuilder 클래스 사용
.NET에서 StringBuilder 클래스를 사용하는 방법을 알아봅니다. 이 클래스를 사용하면 새 개체를 만들지 않고 문자열을 수정합니다.
learn.microsoft.com