다음을 통해 공유


.NET에서 StringBuilder 클래스 사용

String 개체는 변경할 수 없습니다. 클래스의 메서드 중 하나를 사용할 때마다 메모리에 System.String 새 문자열 개체를 만들면 해당 새 개체에 대한 공간을 새로 할당해야 합니다. 문자열을 반복적으로 수정해야 하는 경우 새 String 개체를 만드는 것과 관련된 오버헤드는 비용이 많이 들 수 있습니다. System.Text.StringBuilder 새 개체를 만들지 않고 문자열을 수정하려는 경우 클래스를 사용할 수 있습니다. 예를 들어 루프에서 여러 문자열을 StringBuilder 함께 연결할 때 클래스를 사용하면 성능이 향상될 수 있습니다.

System.Text 네임스페이스 가져오기

클래스는 StringBuilder 네임스페이스에 System.Text 있습니다. 코드에서 정규화된 형식 이름을 제공할 필요가 없도록 네임스페이스를 System.Text 가져올 수 있습니다.

using System;
using System.Text;
Imports System.Text

StringBuilder 개체 인스턴스화

다음 예제와 같이 오버로드된 생성자 메서드 중 하나를 사용하여 변수를 초기화하여 클래스의 새 인스턴스 StringBuilder 를 만들 수 있습니다.

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
Dim myStringBuilder As New StringBuilder("Hello World!")

용량 및 길이 설정

StringBuilder 이 개체는 캡슐화된 문자열의 문자 수를 확장할 수 있는 동적 개체이지만 저장할 수 있는 최대 문자 수에 대한 값을 지정할 수 있습니다. 이 값을 개체의 용량이라고 하며 현재 StringBuilder 보유하는 문자열의 길이와 혼동해서는 안 됩니다. 예를 들어 길이가 5인 "Hello" 문자열을 사용하여 클래스의 StringBuilder 새 인스턴스를 만들고 개체의 최대 용량이 25임을 지정할 수 있습니다. 수정할 때 용량에 StringBuilder도달할 때까지 크기 자체를 다시 할당하지 않습니다. 이 경우 새 공간이 자동으로 할당되고 용량이 두 배가 됩니다. 오버로드된 생성자 중 하나를 사용하여 클래스의 StringBuilder 용량을 지정할 수 있습니다. 다음 예제에서는 개체를 myStringBuilder 최대 25개의 공백으로 확장할 수 있도록 지정합니다.

StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
Dim myStringBuilder As New StringBuilder("Hello World!", 25)

또한 읽기/쓰기 Capacity 속성을 사용하여 개체의 최대 길이를 설정할 수 있습니다. 다음 예제에서는 Capacity 속성을 사용하여 최대 개체 길이를 정의합니다.

myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25

이 메서드를 EnsureCapacity 사용하여 현재 StringBuilder의 용량을 확인할 수 있습니다. 용량이 전달된 값보다 크면 변경되지 않습니다. 그러나 용량이 전달된 값보다 작으면 전달된 값과 일치하도록 현재 용량이 변경됩니다.

속성을 Length 보거나 설정할 수도 있습니다. Length 속성을 Capacity 속성보다 큰 값으로 설정하면 Capacity 속성이 Length 속성과 동일한 값으로 자동으로 변경됩니다. Length 속성을 현재 StringBuilder 내의 문자열 길이보다 작은 값으로 설정하면 문자열이 줄어듭니다.

StringBuilder 문자열 수정

다음 표에서는 StringBuilder의 내용을 수정하는 데 사용할 수 있는 메서드를 나열합니다.

메서드 이름 사용하세요
StringBuilder.Append 현재 StringBuilder의 끝에 정보를 추가합니다.
StringBuilder.AppendFormat 문자열에 전달된 서식 지정자를 서식이 지정된 텍스트로 바꿉니다.
StringBuilder.Insert 문자열 또는 개체를 현재 StringBuilder의 지정된 인덱스에 삽입합니다.
StringBuilder.Remove 현재 StringBuilder에서 지정된 수의 문자를 제거합니다.
StringBuilder.Replace 현재 StringBuilder 에서 지정된 문자 또는 문자열의 모든 항목을 다른 지정된 문자 또는 문자열로 바꿉니다.

추가

Append 메서드를 사용하여 현재 StringBuilder가 나타내는 문자열 끝에 개체의 텍스트 또는 문자열 표현을 추가할 수 있습니다. 다음 예제에서는 StringBuilder 를 "Hello World"로 초기화한 다음 개체의 끝에 일부 텍스트를 추가합니다. 공간은 필요에 따라 자동으로 할당됩니다.

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Append(" What a beautiful day.")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World! What a beautiful day.

AppendFormat

메서드는 StringBuilder.AppendFormat 개체의 StringBuilder 끝에 텍스트를 추가합니다. 서식을 지정할 개체 또는 개체의 구현을 호출하여 IFormattable 지원합니다. 따라서 숫자, 날짜 및 시간 및 열거형 값에 대한 표준 서식 문자열, 숫자 및 날짜 및 시간 값에 대한 사용자 지정 서식 문자열 및 사용자 지정 형식에 대해 정의된 서식 문자열을 허용합니다. 서식 지정에 대한 자세한 내용은 형식 서식을 참조하세요. 이 메서드를 사용하여 변수 형식을 사용자 지정하고 해당 값을 StringBuilder에 추가할 수 있습니다. 다음 예제에서는 메서드를 AppendFormat 사용 하 여 개체의 끝에 통화 값으로 형식이 지정된 정수 값을 배치 합니다 StringBuilder .

int MyInt = 25;
StringBuilder myStringBuilder = new StringBuilder("Your total is ");
myStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Your total is $25.00
Dim MyInt As Integer = 25
Dim myStringBuilder As New StringBuilder("Your total is ")
myStringBuilder.AppendFormat("{0:C} ", MyInt)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'     Your total is $25.00  

삽입

메서드는 Insert 문자열 또는 개체를 현재 StringBuilder 개체의 지정된 위치에 추가합니다. 다음은 이 메서드를 사용하여 개체의 여섯 번째 위치에 단어를 삽입하는 예제입니다 StringBuilder .

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Insert(6, "Beautiful ")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'      Hello Beautiful World!

제거하십시오

Remove 메서드를 사용하여 지정된 0부터 시작하는 인덱스에서 시작하여 현재 StringBuilder 개체에서 지정된 수의 문자를 제거할 수 있습니다. 다음 예제에서는 Remove 메서드를 사용하여 개체를 줄입니다 StringBuilder .

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Remove(5,7);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Remove(5, 7)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello

교체합니다

Replace 메서드를 사용하여 개체 내의 StringBuilder 문자를 지정된 다른 문자로 바꿀 수 있습니다. 다음 예제에서는 Replace 메서드를 사용하여 느낌표 문자(!)의 모든 인스턴스에 대한 개체를 검색 StringBuilder 하고 물음표 문자(?)로 바꿉니다.

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Replace('!', '?');
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World?
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World?

StringBuilder 개체를 문자열로 변환

개체가 나타내는 문자열을 StringBuilder 매개 변수가 있는 String 메서드 StringBuilderString 전달하거나 사용자 인터페이스에 표시하려면 먼저 개체를 개체로 변환해야 합니다. 메서드를 호출하여 이 변환을 수행합니다 StringBuilder.ToString . 다음 예제에서는 여러 StringBuilder 메서드를 호출한 다음 메서드를 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
Imports System.Text

Module Example
    Public Sub Main()
        Dim sb As New StringBuilder()
        Dim flag As Boolean = True
        Dim spellings() As String = {"recieve", "receeve", "receive"}
        sb.AppendFormat("Which of the following spellings is {0}:", flag)
        sb.AppendLine()
        For ctr As Integer = 0 To spellings.GetUpperBound(0)
            sb.AppendFormat("   {0}. {1}", ctr, spellings(ctr))
            sb.AppendLine()
        Next
        sb.AppendLine()
        Console.WriteLine(sb.ToString())
    End Sub
End Module
' The example displays the following output:
'       Which of the following spellings is True:
'          0. recieve
'          1. receeve
'          2. receive

참고하십시오