Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#에서 StringBuilder 클래스의 목적은 무엇입니까?

<시간/>

C#에서 문자열은 변경할 수 없습니다. 즉, 문자열이 생성되면 수정할 수 없습니다. 문자열을 수정하면 수정 사항이 포함된 새 문자열이 반환되며 원래 문자열은 그대로 유지됩니다.

string word = "aaabbbccc";
string newWord = word.Replace('b', 'd');
Console.WriteLine(word); // prints aaabbbccc
Console.WriteLine(newWord); // prints aaadddccc

StringBuilder 클래스는 수정할 수 있는 문자열과 유사한 개체, 즉 변경 가능한 문자열을 나타냅니다. 변경할 수 없는 문자열을 나타내는 문자열 유형과 다르게 구현됩니다.

문자열 개체를 수정하면 복사본이 생성되므로 문자열 개체를 반복적으로 수정하면 성능이 저하될 수 있습니다. 작은 반복의 경우 무시할 수 있지만 거대한 루프의 경우 중요할 수 있습니다. StringBuilder는 문자를 추가, 제거, 교체 또는 삽입하여 문자열을 수정하는 효율적인 대안을 제공합니다.

StringBuilder는 문자를 보관할 내부 버퍼를 유지 관리합니다. 버퍼에 사용 가능한 공간이 있으면 새 데이터를 추가합니다. 그렇지 않으면 새 버퍼를 만들고 이전 데이터를 새 버퍼에 복사한 다음 데이터를 추가합니다.

var sb = new StringBuilder();
for (int i = 0; i < 10; i++){
   sb.Append("a");
}
Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa

다음은 StringBuilder 개체를 구성하는 다양한 방법입니다.

// Initialize a new instance of StringBuilder
var sb1 = new StringBuilder();

// Initialize a new instance of StringBuilder using the given capacity
var sb2 = new StringBuilder(capacity: 10);

// Initialize a new instance of StringBuilder with the given string
var sb3 = new StringBuilder(value: "Hello World");

// Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to
var sb4 = new StringBuilder(capacity: 20, maxCapacity: 10);

// Initialize a new instance of StringBuilder with the given string and capacity
var sb5 = new StringBuilder(value: "Hello", capacity: 20);

// Initialize a new instance of StringBuilder from the given substring and capacity
var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20);

StringBuilder 클래스에는 현재 개체에 있는 문자 수를 나타내는 Length 속성이 있습니다. 개체에 더 많은 문자를 추가하면 개체가 현재 포함할 수 있는 최대 문자 수를 정의하는 용량에 도달할 때까지 길이가 늘어납니다.

추가된 문자 수로 인해 길이가 현재 용량을 초과하는 경우 클래스는 용량을 결합하여 새 메모리를 할당합니다. 그런 다음 새 문자가 개체에 추가되고 개체의 Length 속성이 조정됩니다.

StringBuilder는 MaxCapacity 속성 값에 도달할 때까지 동적으로 추가 메모리를 계속 추가합니다. 그 후에는 개체에 더 이상 메모리를 할당할 수 없습니다. 개체에 더 많은 데이터를 추가하려고 하면 ArgumentOutOfRangeException 또는 OutOfMemoryException 예외가 발생합니다.

StringBuilder는 문자열을 쉽게 수정할 수 있도록 다음과 같은 메서드를 제공합니다.

  • 추가 − 이 인스턴스에 지정된 개체의 문자열 표현을 추가합니다.

  • AppendFormat − 0개 이상의 형식 항목을 포함하는 복합 형식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. 각 형식 항목은 해당 개체 인수의 문자열 표현으로 대체됩니다.

  • AppendJoin − 각 구성원 사이에 지정된 구분 기호를 사용하여 제공된 객체 배열에 있는 요소의 문자열 표현을 연결한 다음 문자열 작성기의 현재 인스턴스에 결과를 추가합니다.

  • AppendLine − 현재 StringBuilder 개체의 끝에 기본 줄 종결자를 추가합니다.

  • 지우기 − 현재 StringBuilder 인스턴스에서 모든 문자를 제거합니다.

  • 복사 대상 − 대상 문자 범위 또는 문자 배열에 문자를 복사합니다.

  • 용량 보장 − 이 StringBuilder 인스턴스의 용량이 지정된 값 이상인지 확인합니다.

  • 같음 − 이 인스턴스와 제공된 인스턴스의 문자열, 용량 및 MaxCapacity 값이 같으면 true를 반환합니다.

  • GetChunks − 문자 청크를 반복하는 데 사용할 수 있는 개체를 반환합니다.

  • 삽입 − 이 인스턴스의 지정된 문자 위치에 지정된 개체의 문자열 표현을 삽입합니다.

  • 제거 − 이 인스턴스에서 지정된 문자 범위를 제거합니다.

  • 교체 − 이 인스턴스에서 지정된 문자 또는 문자열의 모든 발생을 다른 지정된 문자 또는 문자열로 대체합니다.

  • ToString − 현재 인스턴스를 문자열로 변환합니다.

예시

using System;
using System.Text;
class Program{
   static void Main(string[] args){
      string word = "aaabbbccc";
      string newWord = word.Replace('b', 'd');
      Console.WriteLine(word); // prints aaabbbccc
      Console.WriteLine(newWord); // prints aaadddccc
      var sb = new StringBuilder();
      for (int i = 0; i < 10; i++){
         sb.Append("a");
      }
      Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa

      // Initialize a new instance of StringBuilder
      var sb1 = new StringBuilder();

      // Initialize a new instance of StringBuilder using the given capacity
      var sb2 = new StringBuilder(capacity: 10);
     
      // Initialize a new instance of StringBuilder with the given string
      var sb3 = new StringBuilder(value: "Hello World");
      // Initialize a new instance of StringBuilder with the given capacity and the    maximum capacity it can grow to
      var sb4 = new StringBuilder(capacity: 20, maxCapacity: 50);
      // Initialize a new instance of StringBuilder with the given string and capacity
      var sb5 = new StringBuilder(value: "Hello", capacity: 20);

      // Initialize a new instance of StringBuilder from the given substring and capacity
      var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20);
   }
}

출력

aaabbbccc
aaadddccc
aaaaaaaaaa