C#의 StringBuilder.ToString() 메서드는 StringBuilder 객체에 저장된 값을 문자열(String)로 변환하는 데 사용됩니다. StringBuilder는 내부적으로 가변(mutable) 문자 버퍼를 사용하므로, 작업이 끝난 후 최종 결과를 불변(immutable)인 문자열로 얻고 싶을 때 이 메서드가 필수적입니다.
문법(Syntax)
ToString() 메서드에는 두 가지 오버로드가 존재합니다.
public override string ToString (); public string ToString (int begnIndex, int len);
각 매개변수의 의미는 다음과 같습니다.
- begnIndex: 이 인스턴스에서 부분 문자열이 시작되는 위치(인덱스)
- len: 추출할 부분 문자열의 길이
첫 번째 오버로드는 매개변수 없이 호출하여 StringBuilder의 전체 내용을 문자열로 반환하고, 두 번째 오버로드는 지정한 시작 위치부터 지정한 길이만큼의 부분 문자열만 추출하여 반환합니다.
예제 1: ToString() 기본 사용법
다음 예제에서는 ToString() 메서드로 StringBuilder의 값을 출력하는 방법을 살펴봅니다.
using System;
using System.Text;
public class Demo{
public static void Main(){
StringBuilder strBuilder = new StringBuilder("Katie");
Console.WriteLine("String = "+strBuilder.ToString());
Console.WriteLine("\nStringBuilder capacity = "+strBuilder.Capacity);
Console.WriteLine("StringBuilder length = "+strBuilder.Length);
strBuilder.EnsureCapacity(35);
Console.WriteLine("\nStringBuilder capacity= "+strBuilder.Capacity);
Console.WriteLine("StringBuilder length = "+strBuilder.Length);
strBuilder.EnsureCapacity(0);
strBuilder.Length = 0;
Console.WriteLine("\nStringBuilder capacity= "+strBuilder.Capacity);
Console.WriteLine("StringBuilder length = "+strBuilder.Length);
}
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
String = Katie StringBuilder capacity = 16 StringBuilder length = 5 StringBuilder capacity= 35 StringBuilder length = 5 StringBuilder capacity= 35 StringBuilder length = 0
출력 결과에서 확인할 수 있듯이, EnsureCapacity(35)를 호출하면 용량(capacity)이 35로 늘어나지만 실제 문자열 길이(length)는 그대로 유지됩니다. 또한 Length 속성을 0으로 설정하면 내용은 비워지지만 용량은 줄어들지 않습니다.
예제 2: ToString(int, int)으로 부분 문자열 추출하기
이번에는 시작 인덱스와 길이를 지정하여 StringBuilder의 일부분만 문자열로 변환하는 예제입니다.
using System;
using System.Text;
public class Demo{
public static void Main(){
StringBuilder strBuilder = new StringBuilder("TomHanks");
Console.WriteLine("StringBuilder = "+strBuilder.ToString());
Console.WriteLine("String = "+strBuilder.ToString(3, 5));
Console.WriteLine("\nStringBuilder capacity = "+strBuilder.Capacity);
Console.WriteLine("StringBuilder length = "+strBuilder.Length);
strBuilder.EnsureCapacity(35);
Console.WriteLine("\nStringBuilder capacity= "+strBuilder.Capacity);
Console.WriteLine("StringBuilder length = "+strBuilder.Length);
strBuilder.EnsureCapacity(0);
strBuilder.Length = 0;
Console.WriteLine("\nStringBuilder capacity= "+strBuilder.Capacity);
Console.WriteLine("StringBuilder length = "+strBuilder.Length);
}
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
StringBuilder = TomHanks String = Hanks StringBuilder capacity = 16 StringBuilder length = 8 StringBuilder capacity= 35 StringBuilder length = 8 StringBuilder capacity= 35 StringBuilder length = 0
ToString(3, 5)는 인덱스 3에서 시작하여 5개의 문자를 추출하므로 "TomHanks"에서 "Hanks"가 반환됩니다. 이처럼 매개변수가 있는 ToString() 오버로드를 활용하면 Substring()과 유사하게 원하는 구간의 문자열만 손쉽게 얻을 수 있습니다.
정리
- ToString(): StringBuilder의 전체 내용을 문자열로 변환
- ToString(int begnIndex, int len): 지정한 위치부터 지정한 길이만큼의 부분 문자열을 반환
- EnsureCapacity()는 용량만 늘리며 문자열 길이에는 영향을 주지 않음
- Length 속성을 0으로 설정하면 내용이 초기화되지만 용량은 유지됨