티스토리 뷰

Computer Language/C#

[C#] StringBuilder

HONGGG 2023. 8. 15. 04:28

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

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함