StringBuilder StringBuilder StringBuilder StringBuilder Class

Definition

변경할 수 있는 문자열을 나타냅니다. Represents a mutable string of characters. 이 클래스는 상속될 수 없습니다. This class cannot be inherited.

public ref class StringBuilder sealed : System::Runtime::Serialization::ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public sealed class StringBuilder : System.Runtime.Serialization.ISerializable
type StringBuilder = class
    interface ISerializable
Public NotInheritable Class StringBuilder
Implements ISerializable
Inheritance
StringBuilderStringBuilderStringBuilderStringBuilder
Attributes
ComVisibleAttribute SerializableAttribute
Implements

Examples

다음 예제에서는 대부분의 정의한 메서드를 호출 하는 방법을 보여 줍니다는 StringBuilder 클래스입니다.The following example shows how to call many of the methods defined by the StringBuilder class.

using namespace System;
using namespace System::Text;

int main()
{
    // Create a StringBuilder that expects to hold 50 characters.
    // Initialize the StringBuilder with "ABC".
    StringBuilder^ sb = gcnew StringBuilder("ABC", 50);

    // Append three characters (D, E, and F) to the end of the
    // StringBuilder.
    sb->Append(gcnew array<Char>{'D', 'E', 'F'});

    // Append a format string to the end of the StringBuilder.
    sb->AppendFormat("GHI{0}{1}", (Char)'J', (Char)'k');

    // Display the number of characters in the StringBuilder
    // and its string.
    Console::WriteLine("{0} chars: {1}", sb->Length, sb->ToString());

    // Insert a string at the beginning of the StringBuilder.
    sb->Insert(0, "Alphabet: ");

    // Replace all lowercase k's with uppercase K's.
    sb->Replace('k', 'K');

    // Display the number of characters in the StringBuilder
    // and its string.
    Console::WriteLine("{0} chars: {1}", sb->Length, sb->ToString());
}

// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK
using System;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        // Create a StringBuilder that expects to hold 50 characters.
        // Initialize the StringBuilder with "ABC".
        StringBuilder sb = new StringBuilder("ABC", 50);

        // Append three characters (D, E, and F) to the end of the StringBuilder.
        sb.Append(new char[] { 'D', 'E', 'F' });

        // Append a format string to the end of the StringBuilder.
        sb.AppendFormat("GHI{0}{1}", 'J', 'k');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());

        // Insert a string at the beginning of the StringBuilder.
        sb.Insert(0, "Alphabet: ");

        // Replace all lowercase k's with uppercase K's.
        sb.Replace('k', 'K');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());
    }
}

// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK
Imports System.Text

Public Module App 
    Public Sub Main() 
        ' Create a StringBuilder that expects to hold 50 characters.
        ' Initialize the StringBuilder with "ABC".
        Dim sb As New StringBuilder("ABC", 50)

        ' Append three characters (D, E, and F) to the end of the StringBuilder.
        sb.Append(New Char() {"D"c, "E"c, "F"c})

        ' Append a format string to the end of the StringBuilder.
        sb.AppendFormat("GHI{0}{1}", "J"c, "k"c)

        ' Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString())

        ' Insert a string at the beginning of the StringBuilder.
        sb.Insert(0, "Alphabet: ")

        ' Replace all lowercase k's with uppercase K's.
        sb.Replace("k", "K")

        ' Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString())
    End Sub
End Module

' This code produces the following output.
'
' 11 chars: ABCDEFGHIJk
' 21 chars: Alphabet: ABCDEFGHIJK

Remarks

이 클래스는 문자 시퀀스로 변경할 수 있는 값인 문자열 같은 개체를 나타냅니다.This class represents a string-like object whose value is a mutable sequence of characters.

섹션 내용In this section:

String 및 StringBuilder 형식The String and StringBuilder types

하지만 StringBuilderString 둘 다 시퀀스를 나타내는 문자를 다르게 구현 되는 합니다.Although StringBuilder and String both represent sequences of characters, they are implemented differently. String 변경할 수 없는 형식이입니다.String is an immutable type. 수정 하려면 표시 되는 각 작업 즉, 한 String 개체는 실제로 새 문자열을 만듭니다.That is, each operation that appears to modify a String object actually creates a new string.

예를 들어 호출 된 String.Concat 라는 문자열 변수 값을 변경 하려면 다음 C# 예제에서 메서드가 나타납니다 value.For example, the call to the String.Concat method in the following C# example appears to change the value of a string variable named value. 실제로 Concat 메서드가 반환 되는 value 에서 주소를 다른 값을 가진 개체를는 value 메서드에 전달 된 개체입니다.In fact, the Concat method returns a value object that has a different value and address from the value object that was passed to the method. 사용 하 여 예제를 컴파일해야는 참고를 /unsafe 컴파일러 옵션입니다.Note that the example must be compiled using the /unsafe compiler option.

using System;

public class Example
{
   public unsafe static void Main()
   {
      string value = "This is the first sentence" + ".";
      fixed (char* start = value)
      {
         value = String.Concat(value, "This is the second sentence. ");
         fixed (char* current = value)
         {
            Console.WriteLine(start == current);
         }
      }   
   }
}
// The example displays the following output:
//      False

광범위 한 문자열 조작 (예: 여러 번 루프에서에서 문자열을 수정 하는 앱)를 수행 하는 루틴에 대 한 문자열을 반복적으로 수정 하면 성능이 크게 저하를 정확한 수 있습니다.For routines that perform extensive string manipulation (such as apps that modify a string numerous times in a loop), modifying a string repeatedly can exact a significant performance penalty. 대신 사용 하는 StringBuilder를 변경할 수 있는 문자열 클래스인 합니다.The alternative is to use StringBuilder, which is a mutable string class. 가변성은 클래스의 인스턴스를 만든 후 수정할 수 있습니다 추가, 제거, 바꾸기 또는 문자를 삽입 하 여 의미 합니다.Mutability means that once an instance of the class has been created, it can be modified by appending, removing, replacing, or inserting characters. StringBuilder 개체는 문자열에 대 한 확장을 수용 하기 위해 버퍼를 유지 합니다.A StringBuilder object maintains a buffer to accommodate expansions to the string. 대화방; 사용 가능한 경우 버퍼에 새 데이터가 추가 됩니다. 이 고, 그렇지 새로운, 더 큰 버퍼를 할당 하 고 원래 버퍼의 데이터 새 버퍼에 복사 되 고 새 데이터는 그런 다음 새 버퍼에 추가 됩니다.New data is appended to the buffer if room is available; otherwise, a new, larger buffer is allocated, data from the original buffer is copied to the new buffer, and the new data is then appended to the new buffer.

중요

하지만 합니다 StringBuilder 클래스에는 일반적으로 보다 더 나은 성능을 제공 합니다 String 클래스를 자동으로 대체 String 사용 하 여 StringBuilder 문자열을 조작 하려는 때마다.Although the StringBuilder class generally offers better performance than the String class, you should not automatically replace String with StringBuilder whenever you want to manipulate strings. 성능은 새 문자열, 앱을 실행 하는 시스템 및 작업의 형식에 대해 할당할 메모리의 양 문자열의 크기에 따라 달라 집니다.Performance depends on the size of the string, the amount of memory to be allocated for the new string, the system on which your app is executing, and the type of operation. 확인 하려면 앱을 테스트할 준비가 되어 있어야 하는지 여부를 StringBuilder 실제로 성능이 크게 향상을 제공 합니다.You should be prepared to test your app to determine whether StringBuilder actually offers a significant performance improvement.

사용 하는 것이 좋습니다는 String 이러한 조건에서 클래스:Consider using the String class under these conditions:

  • 경우는 앱은 문자열로 변경의 수가 작습니다.When the number of changes that your app will make to a string is small. 이러한 경우 StringBuilder 수 무시할 제품 또는 성능 향상을 통해 String합니다.In these cases, StringBuilder might offer negligible or no performance improvement over String.

  • 경우는 고정된 된 수의 문자열 리터럴 사용 하 여 특히 연결 작업을 수행 합니다.When you are performing a fixed number of concatenation operations, particularly with string literals. 이 경우 컴파일러는 단일 작업으로 연결 작업을 결합할 수 있습니다.In this case, the compiler might combine the concatenation operations into a single operation.

  • 경우에 문자열을 빌드하는 동안 광범위 한 검색 작업을 수행 해야 합니다.When you have to perform extensive search operations while you are building your string. 합니다 StringBuilder 클래스에 메서드를 같은 검색 IndexOf 또는 StartsWith합니다.The StringBuilder class lacks search methods such as IndexOf or StartsWith. 변환 해야 합니다 StringBuilder 개체를 String 이러한 작업과이 사용 하 여 성능이 부정할 수에 대 한 StringBuilder합니다.You'll have to convert the StringBuilder object to a String for these operations, and this can negate the performance benefit from using StringBuilder. 자세한 내용은 참조는 StringBuilder 개체에서 텍스트 검색 섹션입니다.For more information, see the Searching the text in a StringBuilder object section.

사용 하는 것이 좋습니다는 StringBuilder 이러한 조건에서 클래스:Consider using the StringBuilder class under these conditions:

  • 예상 하는 앱 (예: 사용자 입력을 포함 하는 문자열의 임의 숫자로 연결할 루프를 사용 하는 경우) 디자인 타임에 문자열로 변경 내용의 수 알된 수 있도록 합니다.When you expect your app to make an unknown number of changes to a string at design time (for example, when you are using a loop to concatenate a random number of strings that contain user input).

  • 예상 하는 많은 수의 변경 내용 문자열로 있도록 앱.When you expect your app to make a significant number of changes to a string.

StringBuilder의 작동 원리How StringBuilder works

StringBuilder.Length 속성의 문자 수를 나타냅니다는 StringBuilder 현재 개체를 포함 합니다.The StringBuilder.Length property indicates the number of characters the StringBuilder object currently contains. 문자를 추가 하는 경우는 StringBuilder 길이가 증가 크기과 같을 때까지 개체를 StringBuilder.Capacity 개체를 포함할 수 있는 문자 수를 정의 하는 속성입니다.If you add characters to the StringBuilder object, its length increases until it equals the size of the StringBuilder.Capacity property, which defines the number of characters that the object can contain. 추가 문자 수의 길이 경우는 StringBuilder 개체의 현재 용량, 새 메모리를 초과 하는 할당의 값을 Capacity 속성 두 배로 증가, 새 문자가 추가 되어를 StringBuilder 개체 및 해당 Length속성이 조정 됩니다.If the number of added characters causes the length of the StringBuilder object to exceed its current capacity, new memory is allocated, the value of the Capacity property is doubled, new characters are added to the StringBuilder object, and its Length property is adjusted. 에 대 한 추가 메모리를 StringBuilder 개체에 정의 된 값에 도달할 때까지 동적으로 할당 되는 StringBuilder.MaxCapacity 속성입니다.Additional memory for the StringBuilder object is allocated dynamically until it reaches the value defined by the StringBuilder.MaxCapacity property. 최대 용량에 도달 하면 추가 메모리가 없습니다.에 할당 될 수는 StringBuilder 개체 및 문자를 추가 하거나 해당 최대 용량을 초과 확장 하려고 하거나 throw를 ArgumentOutOfRangeException 또는 OutOfMemoryException 예외입니다.When the maximum capacity is reached, no further memory can be allocated for the StringBuilder object, and trying to add characters or expand it beyond its maximum capacity throws either an ArgumentOutOfRangeException or an OutOfMemoryException exception.

다음 예제에서는 어떻게를 StringBuilder 개체 새 메모리 할당 및 개체에 할당 된 문자열을 확장 하는 대로 해당 용량을 동적으로 증가 합니다.The following example illustrates how a StringBuilder object allocates new memory and increases its capacity dynamically as the string assigned to the object expands. 이 코드에서는 만듭니다는 StringBuilder 기본 (매개 변수가 없는) 생성자를 호출 하 여 개체입니다.The code creates a StringBuilder object by calling its default (parameterless) constructor. 이 개체의 기본 용량 16 자 이며 최대 용량 2 십억 개 이상의 문자입니다.The default capacity of this object is 16 characters, and its maximum capacity is more than 2 billion characters. 추가 문자열 "This is 문장."Appending the string "This is a sentence." 문자열 길이 (19 자)의 기본 용량을 초과 하기 때문에 새 메모리 할당의 결과 StringBuilder 개체입니다.results in a new memory allocation because the string length (19 characters) exceeds the default capacity of the StringBuilder object. 32 자로 개체의 용량을 두 배로 만듭니다, 그리고 새 문자열 추가 되 고 개체의 길이 19 자과 같습니다.The capacity of the object doubles to 32 characters, the new string is added, and the length of the object now equals 19 characters. 코드를 다음 추가 문자열 "This is 추가 문장."The code then appends the string "This is an additional sentence." 값에는 StringBuilder 11 번 개체입니다.to the value of the StringBuilder object 11 times. 때마다 작업을 추가 하면 기간을 StringBuilder 용량과 해당 기존 용량을 초과 하는 개체의 두 배가 됩니다 및 Append 작업이 성공 합니다.Whenever the append operation causes the length of the StringBuilder object to exceed its capacity, its existing capacity is doubled and the Append operation succeeds.

using System;
using System.Reflection;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder();
      ShowSBInfo(sb);
      sb.Append("This is a sentence.");
      ShowSBInfo(sb);
      for (int ctr = 0; ctr <= 10; ctr++) {
         sb.Append("This is an additional sentence.");
         ShowSBInfo(sb);
      }   
   }
   
   private static void ShowSBInfo(StringBuilder sb)
   {
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Capacity: 16    MaxCapacity: 2,147,483,647    Length: 0
//    Capacity: 32    MaxCapacity: 2,147,483,647    Length: 19
//    Capacity: 64    MaxCapacity: 2,147,483,647    Length: 50
//    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 81
//    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 112
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 143
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 174
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 205
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 236
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 267
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 298
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 329
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 360
Imports System.Reflection
Imports System.Text

Module Example
   Public Sub Main()
      Dim sb As New StringBuilder()
      ShowSBInfo(sb)
      sb.Append("This is a sentence.")
      ShowSbInfo(sb)
      For ctr As Integer = 0 To 10
         sb.Append("This is an additional sentence.")
         ShowSbInfo(sb)
      Next   
   End Sub
   
   Public Sub ShowSBInfo(sb As StringBuilder)
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'    Capacity: 16    MaxCapacity: 2,147,483,647    Length: 0
'    Capacity: 32    MaxCapacity: 2,147,483,647    Length: 19
'    Capacity: 64    MaxCapacity: 2,147,483,647    Length: 50
'    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 81
'    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 112
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 143
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 174
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 205
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 236
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 267
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 298
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 329
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 360

메모리 할당Memory allocation

기본 용량을 StringBuilder 개체는 16 자 이며 최대 기본 용량 Int32.MaxValue합니다.The default capacity of a StringBuilder object is 16 characters, and its default maximum capacity is Int32.MaxValue. 호출 하는 경우 이러한 기본 값을 사용 합니다 StringBuilder()StringBuilder(String) 생성자입니다.These default values are used if you call the StringBuilder() and StringBuilder(String) constructors.

초기 용량을 명시적으로 정의할 수 있습니다는 StringBuilder 다음과 같은 방법으로 개체:You can explicitly define the initial capacity of a StringBuilder object in the following ways:

  • 중 하나를 호출 하 여 합니다 StringBuilder 포함 하는 생성자를 capacity 개체를 만들 때 매개 변수입니다.By calling any of the StringBuilder constructors that includes a capacity parameter when you create the object.

  • 새 값을 명시적으로 할당 하 여 합니다 StringBuilder.Capacity 속성을 기존 확장 StringBuilder 개체입니다.By explicitly assigning a new value to the StringBuilder.Capacity property to expand an existing StringBuilder object. 참고 새 용량을 사용 하면 기존 보다 크거나 용량 보다 작으면 속성 예외를 throw 하는 StringBuilder 개체의 최대 용량입니다.Note that the property throws an exception if the new capacity is less than the existing capacity or greater than the StringBuilder object's maximum capacity.

  • 호출 하 여는 StringBuilder.EnsureCapacity 새 용량을 사용 하 여 메서드.By calling the StringBuilder.EnsureCapacity method with the new capacity. 새 용량 보다 크지 않아야 합니다 StringBuilder 개체의 최대 용량입니다.The new capacity must not be greater than the StringBuilder object's maximum capacity. 할당할 달리 합니다 Capacity 속성인 EnsureCapacity 경우 예외를 throw 하지 않습니다 원하는 새 용량을 사용 하면 기존 용량 보다 작습니다; 여기에서 메서드 호출의 영향을 주지 않습니다.However, unlike an assignment to the Capacity property, EnsureCapacity does not throw an exception if the desired new capacity is less than the existing capacity; in this case, the method call has no effect.

문자열의 길이에 할당 하는 경우는 StringBuilder 기본 용량 또는 지정된 된 용량을 초과 하는 생성자 호출에서 개체를 Capacity 속성은 사용 하 여 지정 된 문자열의 길이 value 매개 변수.If the length of the string assigned to the StringBuilder object in the constructor call exceeds either the default capacity or the specified capacity, the Capacity property is set to the length of the string specified with the value parameter.

최대 용량을 명시적으로 정의할 수 있습니다는 StringBuilder 를 호출 하 여 개체를 StringBuilder(Int32, Int32) 생성자입니다.You can explicitly define the maximum capacity of a StringBuilder object by calling the StringBuilder(Int32, Int32) constructor. 새 값을 할당 하 여 최대 용량을 변경할 수 없습니다는 MaxCapacity 속성을 읽기 전용 이기 때문입니다.You can't change the maximum capacity by assigning a new value to the MaxCapacity property, because it is read-only.

이전 섹션과 기존 용량에 메모리가 부족 하 여, 추가 될 때마다 표시를 할당의 용량을 StringBuilder 개체에 정의 된 값까지 double는 MaxCapacity 속성입니다.As the previous section shows, whenever the existing capacity is inadequate, additional memory is allocated and the capacity of a StringBuilder object doubles up to the value defined by the MaxCapacity property.

일반적으로 기본 용량 및 최대 용량은 대부분의 앱에 적합 합니다.In general, the default capacity and maximum capacity are adequate for most apps. 다음 조건에서 이러한 값을 설정 하는 것이 좋습니다.You might consider setting these values under the following conditions:

  • 하는 경우의 최종 크기를 StringBuilder 개체는 몇 메가바이트를 초과 일반적으로 매우 큰 증가할 수 있습니다.If the eventual size of the StringBuilder object is likely to grow exceedingly large, typically in excess of several megabytes. 이 경우 있을 초기 설정에서 성능상의 이점을 Capacity 너무 많은 메모리 재할당에 대 한 필요성을 제거 하려면 상대적으로 높은 값으로 속성입니다.In this case, there may be some performance benefit from setting the initial Capacity property to a significantly high value to eliminate the need for too many memory reallocations.

  • 앱 제한 된 메모리를 사용 하 여 시스템에서 실행 되는 합니다.If your app is running on a system with limited memory. 설정을 고려해 야 할 수 있습니다이 경우에 MaxCapacity 속성을 보다 작은 Int32.MaxValue 앱 메모리 사용이 제한 된 환경에서 실행 되도록를 일으킬 수 있는 큰 문자열을 처리 하는 경우.In this case, you may want to consider setting the MaxCapacity property to less than Int32.MaxValue if your app is handling large strings that may cause it to execute in a memory-constrained environment.

StringBuilder 개체 인스턴스화Instantiating a StringBuilder object

인스턴스화하는 StringBuilder 중 다음 표에 나열 된 6 개 오버 로드 된 클래스 생성자를 호출 하 여 개체입니다.You instantiate a StringBuilder object by calling one of its six overloaded class constructors, which are listed in the following table. 생성자의 세 가지 인스턴스화를 StringBuilder 값인 빈 문자열인 경우 개체는 설정 하지만 해당 CapacityMaxCapacity 다르게 값입니다.Three of the constructors instantiate a StringBuilder object whose value is an empty string, but set its Capacity and MaxCapacity values differently. 나머지 3 개 생성자는 정의 StringBuilder 용량 및 특정 문자열 값을 가진 개체입니다.The remaining three constructors define a StringBuilder object that has a specific string value and capacity. 기본 최대 용량을 사용 하 여 3 개 생성자 중 두 가지 Int32.MaxValue반면 세 번째를 사용 하면 최대 용량을 설정할 수 있습니다.Two of the three constructors use the default maximum capacity of Int32.MaxValue, whereas the third allows you to set the maximum capacity.

생성자Constructor 문자열 값String value Capacity 최대 용량Maximum capacity
StringBuilder() String.Empty 1616 Int32.MaxValue
StringBuilder(Int32) String.Empty 정의 된 capacity 매개 변수Defined by the capacity parameter Int32.MaxValue
StringBuilder(Int32, Int32) String.Empty 정의 된 capacity 매개 변수Defined by the capacity parameter 정의 된 maxCapacity 매개 변수Defined by the maxCapacity parameter
StringBuilder(String) 정의 된 value 매개 변수Defined by the value parameter 16 또는 value합니다.16 or value. Length에서 더 큰 쪽Length, whichever is greater Int32.MaxValue
StringBuilder(String, Int32) 정의 된 value 매개 변수Defined by the value parameter 정의 된 capacity 매개 변수 또는 value합니다.Defined by the capacity parameter or value. Length에서 더 큰 쪽입니다.Length, whichever is greater. Int32.MaxValue
StringBuilder(String, Int32, Int32, Int32) 정의한 value합니다.Defined by value. Substring(startIndex, length)Substring(startIndex, length) 정의 된 capacity 매개 변수 또는 value합니다.Defined by the capacity parameter or value. Length에서 더 큰 쪽입니다.Length, whichever is greater. 정의 된 maxCapacity 매개 변수Defined by the maxCapacity parameter

다음 예제에서는 이러한 생성자 오버 로드 중 3 개를 사용 하 여 인스턴스화할 StringBuilder 개체입니다.The following example uses three of these constructor overloads to instantiate StringBuilder objects.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      string value = "An ordinary string";
      int index = value.IndexOf("An ") + 3;
      int capacity = 0xFFFF;
      
      // Instantiate a StringBuilder from a string.
      StringBuilder sb1 = new StringBuilder(value);
      ShowSBInfo(sb1); 
      
      // Instantiate a StringBuilder from string and define a capacity.  
      StringBuilder sb2 = new StringBuilder(value, capacity);   
      ShowSBInfo(sb2); 
      
      // Instantiate a StringBuilder from substring and define a capacity.  
      StringBuilder sb3 = new StringBuilder(value, index, 
                                            value.Length - index, 
                                            capacity );
      ShowSBInfo(sb3); 
   }

   public static void ShowSBInfo(StringBuilder sb)
   {
      Console.WriteLine("\nValue: {0}", sb.ToString());
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Value: An ordinary string
//    Capacity: 18    MaxCapacity: 2,147,483,647    Length: 18
//    
//    Value: An ordinary string
//    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 18
//    
//    Value: ordinary string
//    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 15
Imports System.Text

Module Example
   Public Sub Main()
      Dim value As String = "An ordinary string"
      Dim index As Integer = value.IndexOf("An ") + 3
      Dim capacity As Integer = &hFFFF
      
      ' Instantiate a StringBuilder from a string.
      Dim sb1 As New StringBuilder(value)
      ShowSBInfo(sb1) 
      
      ' Instantiate a StringBuilder from string and define a capacity.  
      Dim sb2 As New StringBuilder(value, capacity)   
      ShowSBInfo(sb2) 
      
      ' Instantiate a StringBuilder from substring and define a capacity.  
      Dim sb3 As New StringBuilder(value, index, 
                                   value.Length - index, 
                                   capacity )
      ShowSBInfo(sb3) 
   End Sub
   
   Public Sub ShowSBInfo(sb As StringBuilder)
      Console.WriteLine()
      Console.WriteLine("Value: {0}", sb.ToString())
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'    Value: An ordinary string
'    Capacity: 18    MaxCapacity: 2,147,483,647    Length: 18
'    
'    Value: An ordinary string
'    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 18
'    
'    Value: ordinary string
'    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 15

StringBuilder 메서드 호출Calling StringBuilder methods

문자열을 수정 하는 메서드 중 대부분을 StringBuilder 인스턴스는 동일한 인스턴스에 대 한 참조를 반환 합니다.Most of the methods that modify the string in a StringBuilder instance return a reference to that same instance. 이렇게 하면 호출 StringBuilder 두 가지 방법으로 메서드:This enables you to call StringBuilder methods in two ways:

  • 개별 메서드를 호출할 수 있으며 다음 예제와 같이 반환 값을 무시할 수 있습니다.You can make individual method calls and ignore the return value, as the following example does.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          StringBuilder sb = new StringBuilder();
          sb.Append("This is the beginning of a sentence, ");
          sb.Replace("the beginning of ", "");
          sb.Insert(sb.ToString().IndexOf("a ") + 2, "complete ");
          sb.Replace(",", ".");
          Console.WriteLine(sb.ToString());
       }
    }
    // The example displays the following output:
    //        This is a complete sentence.
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim sb As New StringBuilder()
          sb.Append("This is the beginning of a sentence, ")
          sb.Replace("the beginning of ", "")
          sb.Insert(sb.ToString().IndexOf("a ") + 2, "complete ")
          sb.Replace(",", ".")
          Console.WriteLine(sb.ToString())
       End Sub
    End Module
    ' The example displays the following output:
    '       This is a complete sentence.
    
  • 단일 문에서 일련의 메서드 호출을 만들 수 있습니다.You can make a series of method calls in a single statement. 연속 작업을 연결 하는 단일 문으로 작성 하려는 경우에 편리할 수 있습니다.This can be convenient if you want to write a single statement that chains successive operations. 다음 예제에서는 코드 한 줄으로 이전 예제에서 세 개의 메서드 호출을 통합합니다.The following example consolidates three method calls from the previous example into a single line of code.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          StringBuilder sb = new StringBuilder("This is the beginning of a sentence, ");
          sb.Replace("the beginning of ", "").Insert(sb.ToString().IndexOf("a ") + 2, 
                                                     "complete ").Replace(",", ".");
          Console.WriteLine(sb.ToString());
       }
    }
    // The example displays the following output:
    //        This is a complete sentence.
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim sb As New StringBuilder("This is the beginning of a sentence, ")
          sb.Replace("the beginning of ", "").Insert(sb.ToString().IndexOf("a ") + 2, _
                                                     "complete ").Replace(", ", ".")
          Console.WriteLine(sb.ToString())
       End Sub
    End Module
    ' The example displays the following output:
    '       This is a complete sentence.
    

StringBuilder 작업 수행Performing StringBuilder operations

메서드를 사용할 수는 StringBuilder 반복, 추가, 삭제 또는 수정에 문자 클래스는 StringBuilder 개체입니다.You can use the methods of the StringBuilder class to iterate, add, delete, or modify characters in a StringBuilder object.

StringBuilder 문자를 반복합니다.Iterating StringBuilder characters

문자를 액세스할 수 있습니다는 StringBuilder 사용 하 여 개체를 StringBuilder.Chars[Int32] 속성입니다.You can access the characters in a StringBuilder object by using the StringBuilder.Chars[Int32] property. C#에서는 Chars[Int32] 인덱서;는 Visual Basic에서는 기본 속성을는 StringBuilder 클래스입니다.In C#, Chars[Int32] is an indexer; in Visual Basic, it is the default property of the StringBuilder class. 이렇게 하면 명시적으로 참조 하지 않고 해당 인덱스에만 사용 하 여 개별 문자를 검색 하는 Chars[Int32] 속성입니다.This enables you to set or retrieve individual characters by using their index only, without explicitly referencing the Chars[Int32] property. 문자를 StringBuilder 개체는 인덱스 (0)에서 시작 하 고 인덱스 계속 Length -1입니다.Characters in a StringBuilder object begin at index 0 (zero) and continue to index Length - 1.

다음 예제는 Chars[Int32] 속성입니다.The following example illustrates the Chars[Int32] property. 10 개 난수를 추가 하는 StringBuilder 개체를 다음 각 문자를 반복 합니다.It appends ten random numbers to a StringBuilder object, and then iterates each character. 문자의 유니코드 범주 이면 UnicodeCategory.DecimalDigitNumber, 수를 1 씩 감소 (또는 해당 값이 0 이면 숫자 9로 변경).If the character's Unicode category is UnicodeCategory.DecimalDigitNumber, it decreases the number by 1 (or changes the number to 9 if its value is 0). 내용을 표시 하는 예제는 StringBuilder 전과 개별 문자 값이 변경 된 후 두 개체입니다.The example displays the contents of the StringBuilder object both before and after the values of individual characters were changed.

using System;
using System.Globalization;
using System.Text;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      StringBuilder sb = new StringBuilder();
      
      // Generate 10 random numbers and store them in a StringBuilder.
      for (int ctr = 0; ctr <= 9; ctr++)
         sb.Append(rnd.Next().ToString("N5"));    

      Console.WriteLine("The original string:");
      Console.WriteLine(sb.ToString());
            
      // Decrease each number by one.
      for (int ctr = 0; ctr < sb.Length; ctr++) {
         if (Char.GetUnicodeCategory(sb[ctr]) == UnicodeCategory.DecimalDigitNumber) {
            int number = (int) Char.GetNumericValue(sb[ctr]);
            number--;
            if (number < 0) number = 9;
         
            sb[ctr] = number.ToString()[0];
         }
      }
      Console.WriteLine("\nThe new string:");
      Console.WriteLine(sb.ToString());
   }
}
// The example displays the following output:
//    The original string:
//    1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
//    000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
//    .00000
//    
//    The new string:
//    0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
//    999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
//    .99999
Imports System.Globalization
Imports System.Text

Module Example
   Public Sub Main()
      Dim rnd As New Random()
      Dim sb As New StringBuilder()
      
      ' Generate 10 random numbers and store them in a StringBuilder.
      For ctr As Integer = 0 To 9
         sb.Append(rnd.Next().ToString("N5"))    
      Next
      Console.WriteLine("The original string:")
      Console.WriteLine(sb.ToString())
      Console.WriteLine()
            
      ' Decrease each number by one.
      For ctr As Integer = 0 To sb.Length - 1
         If Char.GetUnicodeCategory(sb(ctr)) = UnicodeCategory.DecimalDigitNumber Then
            Dim number As Integer = CType(Char.GetNumericValue(sb(ctr)), Integer)
            number -= 1
            If number < 0 Then number = 9
         
            sb(ctr) = number.ToString()(0)
         End If
      Next
      Console.WriteLine("The new string:")
      Console.WriteLine(sb.ToString())
   End Sub
End Module
' The example displays the following output:
'    The original string:
'    1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
'    000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
'    .00000
'    
'    The new string:
'    0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
'    999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
'    .99999

Chars[Int32] 속성에서 문자 기반 인덱싱을 사용하면 다음과 같은 조건 하에서 성능이 매우 느려질 수 있습니다.Using character-based indexing with the Chars[Int32] property can be extremely slow under the following conditions:

각 문자 액세스가 인덱싱할 올바른 버퍼를 찾기 위해 연결된 전체 청크 목록을 확인하기 때문에 성능이 심각하게 저하됩니다.Performance is severely impacted because each character access walks the entire linked list of chunks to find the correct buffer to index into.

참고

대규모 "청크" StringBuilder 개체의 경우 하나 이하의 문자에 대한 인덱스 기반 액세스에 Chars[Int32] 속성을 사용하면 성능에 미치는 영향이 적습니다. 일반적으로 0(n) 개 작업에 영향을 줍니다.Even for a large "chunky" StringBuilder object, using the Chars[Int32] property for index-based access to one or a small number of characters has a negligible performance impact; typically, it is an 0(n) operation. StringBuilder 개체에서 문자를 반복할 때 성능에 상당한 영향이 발생합니다. O(n^2) 개 작업에 영향을 줍니다.The significant performance impact occurs when iterating the characters in the StringBuilder object, which is an O(n^2) operation.

StringBuilder 개체에서 문자 기반 인덱싱을 사용할 때 성능 문제가 발생하는 경우 다음 방법 중 하나를 사용할 수 있습니다.If you encounter performance issues when using character-based indexing with StringBuilder objects, you can use any of the following workarounds:

  • ToString 메서드를 호출하여 StringBuilder 인스턴스를 String으로 변환한 다음, 문자열의 문자에 액세스합니다.Convert the StringBuilder instance to a String by calling the ToString method, then access the characters in the string.

  • 기존 StringBuilder 개체의 콘텐츠를 크기가 미리 지정된 새로운 StringBuilder 개체로 복사합니다.Copy the contents of the existing StringBuilder object to a new pre-sized StringBuilder object. 새로운 StringBuilder 개체가 청크가 아니기 때문에 성능이 향상됩니다.Performance improves because the new StringBuilder object is not chunky. 예:For example:

    // sbOriginal is the existing StringBuilder object
    var sbNew = new StringBuilder(sbOriginal.ToString(), sbOriginal.Length);
    
    ' sbOriginal is the existing StringBuilder object
    Dim sbNew = New StringBuilder(sbOriginal.ToString(), sbOriginal.Length)
    
  • StringBuilder(Int32) 생성자를 호출하여 StringBuilder 개체의 초기 용량을 예상된 최대 크기와 대략 동일한 값으로 설정합니다.Set the initial capacity of the StringBuilder object to a value that is approximately equal to its maximum expected size by calling the StringBuilder(Int32) constructor. StringBuilder가 거의 최대 용량에 도달하더라도 메모리의 전체 블록을 할당합니다.Note that this allocates the entire block of memory even if the StringBuilder rarely reaches its maximum capacity.

StringBuilder 개체에 텍스트 추가Adding text to a StringBuilder object

합니다 StringBuilder 클래스의 내용을 확장 하기 위해 다음 메서드를 포함 한 StringBuilder 개체:The StringBuilder class includes the following methods for expanding the contents of a StringBuilder object:

  • 합니다 Append 메서드는 추가 부분 문자열, 문자열, 문자 배열, 문자 배열의 일부 단일 문자를 여러 번 반복 하거나 기본 데이터의 문자열 표현을 입력 하 여를 StringBuilder 개체입니다.The Append method appends a string, a substring, a character array, a portion of a character array, a single character repeated multiple times, or the string representation of a primitive data type to a StringBuilder object.

  • 합니다 AppendLine 줄 종결자 또는 줄 종결자가 오는와 함께 문자열을 추가 하는 메서드를 StringBuilder 개체입니다.The AppendLine method appends a line terminator or a string along with a line terminator to a StringBuilder object.

  • AppendFormat 메서드를 추가를 StringBuilder 개체입니다.The AppendFormat method appends a to a StringBuilder object. 결과 문자열에 포함 된 개체의 문자열 표현에는 현재 시스템 문화권 또는 지정된 된 문화권의 서식 규칙 반영할 수 있습니다.The string representations of objects included in the result string can reflect the formatting conventions of the current system culture or a specified culture.

  • Insert 메서드 삽입 문자열을 부분 문자열, 문자열의 여러 반복 문자 배열, 문자 배열의 일부 또는 기본 데이터의 문자열 표현에서 지정된 된 위치에서 입력을 StringBuilder 개체입니다.The Insert method inserts a string, a substring, multiple repetitions of a string, a character array, a portion of a character array, or the string representation of a primitive data type at a specified position in the StringBuilder object. 위치는 0부터 시작 인덱스에 의해 정의 됩니다.The position is defined by a zero-based index.

다음 예제에서는 합니다 Append, AppendLine, AppendFormat, 및 Insert 의 텍스트를 확장 하는 방법을 StringBuilder 개체입니다.The following example uses the Append, AppendLine, AppendFormat, and Insert methods to expand the text of a StringBuilder object.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      // Create a StringBuilder object with no text.
      StringBuilder sb = new StringBuilder();
      // Append some text.
      sb.Append('*', 10).Append(" Adding Text to a StringBuilder Object ").Append('*', 10);
      sb.AppendLine("\n");
      sb.AppendLine("Some code points and their corresponding characters:");
      // Append some formatted text.
      for (int ctr = 50; ctr <= 60; ctr++) {
         sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr));
         sb.AppendLine();
      }
      // Find the end of the introduction to the column.
      int pos = sb.ToString().IndexOf("characters:") + 11 + 
                Environment.NewLine.Length;
      // Insert a column header.
      sb.Insert(pos, String.Format("{2}{0,12:X4} {1,12}{2}", "Code Unit", 
                                   "Character", "\n"));      

      // Convert the StringBuilder to a string and display it.      
      Console.WriteLine(sb.ToString());      
   }
}
// The example displays the following output:
//    ********** Adding Text to a StringBuilder Object **********
//    
//    Some code points and their corresponding characters:
//    
//       Code Unit    Character
//            0032            2
//            0033            3
//            0034            4
//            0035            5
//            0036            6
//            0037            7
//            0038            8
//            0039            9
//            003A            :
//            003B            ;
//            003C            <
Imports System.Text

Module Example
   Public Sub Main()
      ' Create a StringBuilder object with no text.
      Dim sb As New StringBuilder()
      ' Append some text.
      sb.Append("*"c, 10).Append(" Adding Text to a StringBuilder Object ").Append("*"c, 10)
      sb.AppendLine()
      sb.AppendLine()
      sb.AppendLine("Some code points and their corresponding characters:")
      ' Append some formatted text.
      For ctr = 50 To 60
         sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr))
         sb.AppendLine()
      Next
      ' Find the end of the introduction to the column.
      Dim pos As Integer = sb.ToString().IndexOf("characters:") + 11 + 
                           Environment.NewLine.Length
      ' Insert a column header.
      sb.Insert(pos, String.Format("{2}{0,12:X4} {1,12}{2}", "Code Unit", 
                                   "Character", vbCrLf))      

      ' Convert the StringBuilder to a string and display it.      
      Console.WriteLine(sb.ToString())      
   End Sub
End Module
' The example displays the following output:
'       ********** Adding Text to a StringBuilder Object **********
'       
'       Some code points and their corresponding characters:
'       
'          Code Unit    Character
'               0032            2
'               0033            3
'               0034            4
'               0035            5
'               0036            6
'               0037            7
'               0038            8
'               0039            9
'               003A            :
'               003B            ;
'               003C            <

StringBuilder 개체의 텍스트를 삭제 하는 중Deleting text from a StringBuilder object

합니다 StringBuilder 클래스의 현재 크기를 줄일 수 있는 메서드가 포함 됩니다 StringBuilder 인스턴스.The StringBuilder class includes methods that can reduce the size of the current StringBuilder instance. Clear 메서드는 모든 문자를 제거 하 고 설정를 Length 속성을 0.The Clear method removes all characters and sets the Length property to zero. Remove 메서드는 지정 된 개수의 문자를 특정 인덱스 위치부터 삭제 합니다.The Remove method deletes a specified number of characters starting at a particular index position. 또한 끝에서 문자를 제거할 수 있습니다는 StringBuilder 개체를 설정 하 여 해당 Length 현재 인스턴스의 길이 보다 작은 값으로 속성.In addition, you can remove characters from the end of a StringBuilder object by setting its Length property to a value that is less than the length of the current instance.

다음 예제에서 텍스트의 일부를 제거는 StringBuilder 개체, 해당 결과 용량, 최대 용량 및 길이 속성 값을 표시 하 고 호출 합니다 Clear 에서 모든 문자를 제거 하는 방법을 StringBuilder 개체.The following example removes some of the text from a StringBuilder object, displays its resulting capacity, maximum capacity, and length property values, and then calls the Clear method to remove all the characters from the StringBuilder object.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder("A StringBuilder object");
      ShowSBInfo(sb);
      // Remove "object" from the text.
      string textToRemove = "object";
      int pos = sb.ToString().IndexOf(textToRemove);
      if (pos >= 0) {
         sb.Remove(pos, textToRemove.Length);
         ShowSBInfo(sb);
      }
      // Clear the StringBuilder contents.
      sb.Clear();
      ShowSBInfo(sb);   
   }

   public static void ShowSBInfo(StringBuilder sb)
   {
      Console.WriteLine("\nValue: {0}", sb.ToString());
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Value: A StringBuilder object
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 22
//    
//    Value: A StringBuilder
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 16
//    
//    Value:
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 0
Imports System.Text

Module Example
   Public Sub Main()
      Dim sb As New StringBuilder("A StringBuilder object")
      ShowSBInfo(sb)
      ' Remove "object" from the text.
      Dim textToRemove As String = "object"
      Dim pos As Integer = sb.ToString().IndexOf(textToRemove)
      If pos >= 0
         sb.Remove(pos, textToRemove.Length)
         ShowSBInfo(sb)
      End If
      ' Clear the StringBuilder contents.
      sb.Clear()
      ShowSBInfo(sb)   
   End Sub

   Public Sub ShowSBInfo(sb As StringBuilder)
      Console.WriteLine()
      Console.WriteLine("Value: {0}", sb.ToString())
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'    Value: A StringBuilder object
'    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 22
'    
'    Value: A StringBuilder
'    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 16
'    
'    Value:
'    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 0

StringBuilder 개체의 텍스트를 수정합니다.Modifying the text in a StringBuilder object

합니다 StringBuilder.Replace 메서드는 문자 또는 문자열 전체에 있는 모든 항목을 대체 StringBuilder 개체 또는 특정 문자 범위입니다.The StringBuilder.Replace method replaces all occurrences of a character or a string in the entire StringBuilder object or in a particular character range. 다음 예제에서는 합니다 Replace 에서 물음표 (?)를 사용 하 여 모든 느낌표 (!)를 대체 하는 방법의 StringBuilder 개체입니다.The following example uses the Replace method to replace all exclamation points (!) with question marks (?) in the StringBuilder object.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
      MyStringBuilder.Replace('!', '?');
      Console.WriteLine(MyStringBuilder);
   }
}
// The example displays the following output:
//       Hello World?
Imports System.Text

Module Example
   Public Sub Main()
      Dim MyStringBuilder As New StringBuilder("Hello World!")
      MyStringBuilder.Replace("!"c, "?"c)
      Console.WriteLine(MyStringBuilder)
   End Sub
End Module
' The example displays the following output:
'       Hello World?

StringBuilder 개체의 텍스트를 검색합니다.Searching the text in a StringBuilder object

StringBuilder 클래스와 비슷한 메서드를 포함 되지 않습니다는 String.Contains, String.IndexOf, 및 String.StartsWith 에서 제공 하는 메서드는 String 클래스를 특정 문자 또는 부분 문자열에 대 한 개체를 검색할 수 있습니다.The StringBuilder class does not include methods similar to the String.Contains, String.IndexOf, and String.StartsWith methods provided by the String class, which allow you to search the object for a particular character or a substring. 존재 여부를 확인 하거나 부분 문자열의 문자 위치 시작을 검색 하는 필요는 String 문자열 검색 방법 또는 정규식 메서드 중 하나를 사용 하 여 값입니다.Determining the presence or starting character position of a substring requires that you search a String value by using either a string search method or a regular expression method. 다음 표에서 보여 주듯이 이러한 검색을 구현 하는 방법은 네 가지입니다.There are four ways to implement such searches, as the following table shows.

기술Technique 전문가Pros 단점Cons
추가 하기 전에 문자열 값을 검색 합니다 StringBuilder 개체입니다.Search string values before adding them to the StringBuilder object. 부분 문자열이 있는지 여부를 결정 하는 데 유용 합니다.Useful for determining whether a substring exists. 부분 문자열의 인덱스 위치는 중요 한 경우 사용할 수 없습니다.Cannot be used when the index position of a substring is important.
호출 ToString 반환 된 검색 및 String 개체입니다.Call ToString and search the returned String object. 사용 하기 쉬운 모든 텍스트를 할당 하는 경우는 StringBuilder 개체를 선택한 다음 수정 하기 시작 합니다.Easy to use if you assign all the text to a StringBuilder object, and then begin to modify it. 반복적으로 호출 하기가 불편 ToString 하는 경우 수정 해야 모든 텍스트에 추가 되기 전에 StringBuilder 개체입니다.Cumbersome to repeatedly call ToString if you must make modifications before all text is added to the StringBuilder object.

끝에서 작동 하도록 설정 해야 합니다 StringBuilder 개체의 텍스트 내용을 변경 하려는 경우.You must remember to work from the end of the StringBuilder object's text if you're making changes.
사용 된 Chars[Int32] 순차적으로 문자 범위를 검색 하는 속성입니다.Use the Chars[Int32] property to sequentially search a range of characters. 개별 문자 또는 작은 부분 문자열을 사용 하 여 유지 하려는 경우에 유용 합니다.Useful if you're concerned with individual characters or a small substring. 검색할 문자 수가 큰 경우 또는 검색 논리는 복잡 한 경우 번거롭습니다.Cumbersome if the number of characters to search is large or if the search logic is complex.

반복 된 메서드 호출을 통해 매우 큰 증가 하는 개체에 대 한 성능이 매우 저하 결과입니다.Results in very poor performance for objects that have grown very large through repeated method calls.
변환를 StringBuilder 개체를 String 개체를에 수정 작업을 수행 합니다 String 개체.Convert the StringBuilder object to a String object, and perform modifications on the String object. 수정 횟수가 작은 경우에 유용 합니다.Useful if the number of modifications is small. 성능 이점은 부정 합니다 StringBuilder 클래스의 수정 번호 큰 경우.Negates the performance benefit of the StringBuilder class if the number of modifications is large.

이러한 기술을 자세히 살펴보겠습니다.Let's examine these techniques in greater detail.

  • 검색 목표에 저장 하기 전에 문자열을 검색할 수 있습니다 (즉, 필요가 없는 경우 부분 문자열의 위치에 있는) 특정 하위 문자열이 있는지 확인 하는 경우는 StringBuilder 개체입니다.If the goal of the search is to determine whether a particular substring exists (that is, if you aren't interested in the position of the substring), you can search strings before storing them in the StringBuilder object. 다음 예제에서는 한 가지 구현을 제공 합니다.The following example provides one possible implementation. 정의 StringBuilderFinder 클래스의 생성자에 대 한 참조를 전달 되는 StringBuilder 개체 및 문자열에서 찾을 부분 문자열입니다.It defines a StringBuilderFinder class whose constructor is passed a reference to a StringBuilder object and the substring to find in the string. 이 예제에서는 예제의 경우 기록 된 온도가 화씨 또는 섭씨로와 적절 한 소개 텍스트의 시작 부분에 추가 하는지 여부를 결정 하려고 합니다 StringBuilder 개체입니다.In this case, the example tries to determine whether recorded temperatures are in Fahrenheit or Celsius, and adds the appropriate introductory text to the beginning of the StringBuilder object. 난수 생성기를 섭씨 또는 화씨 데이터가 들어 있는 배열을 선택 하는 데 사용 됩니다.A random number generator is used to select an array that contains data in either degrees Celsius or degrees Fahrenheit.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          Random rnd = new Random();
          string[] tempF = { "47.6F", "51.3F", "49.5F", "62.3F" };
          string[] tempC = { "21.2C", "16.1C", "23.5C", "22.9C" };
          string[][] temps = { tempF, tempC }; 
    
          StringBuilder sb = new StringBuilder();
          var f = new StringBuilderFinder(sb, "F");
          var baseDate = new DateTime(2013, 5, 1); 
          String[] temperatures = temps[rnd.Next(2)];
          bool isFahrenheit = false;
          foreach (var temperature in temperatures) {
             if (isFahrenheit)
                sb.AppendFormat("{0:d}: {1}\n", baseDate, temperature);
             else
                isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}\n", 
                                                 baseDate, temperature));
             baseDate = baseDate.AddDays(1);
          }            
          if (isFahrenheit) {
             sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit");
             sb.Insert(47, "\n\n");
          }
          else {
             sb.Insert(0, "Average Daily Temperature in Degrees Celsius");
             sb.Insert(44, "\n\n");
          }   
          Console.WriteLine(sb.ToString());
       }
    }
    
    public class StringBuilderFinder
    {
       private StringBuilder sb;
       private String text;
       
       public StringBuilderFinder(StringBuilder sb, String textToFind)
       {
          this.sb = sb;
          this.text = textToFind;
       }
       
       public bool SearchAndAppend(String stringToSearch)
       {
          sb.Append(stringToSearch);
          return stringToSearch.Contains(text);
       }
    }
    // The example displays output similar to the following:
    //    Average Daily Temperature in Degrees Celsius
    //    
    //    5/1/2013: 21.2C
    //    5/2/2013: 16.1C
    //    5/3/2013: 23.5C
    //    5/4/2013: 22.9C
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim rnd As New Random()
          Dim tempF() As String = { "47.6F", "51.3F", "49.5F", "62.3F" }
          Dim tempC() As String = { "21.2C", "16.1C", "23.5C", "22.9C" }
          Dim temps()() As String = { tempF, tempC } 
    
          Dim sb As StringBuilder = New StringBuilder()
          Dim f As New StringBuilderFinder(sb, "F")
          Dim baseDate As New DateTime(2013, 5, 1) 
          Dim temperatures() As String = temps(rnd.Next(2))
          Dim isFahrenheit As Boolean = False
          For Each temperature In temperatures
             If isFahrenheit Then
                sb.AppendFormat("{0:d}: {1}{2}", baseDate, temperature, vbCrLf)
             Else
                isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}{2}", 
                                                 baseDate, temperature, vbCrLf))
             End If
             baseDate = baseDate.AddDays(1)
          Next            
          If isFahrenheit Then
             sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit")
             sb.Insert(47, vbCrLf + vbCrLf)
          Else
             sb.Insert(0, "Average Daily Temperature in Degrees Celsius")
             sb.Insert(44, vbCrLf + vbCrLf)
          End If   
          Console.WriteLine(sb.ToString())
       End Sub
    End Module
    
    Public Class StringBuilderFinder
       Private sb As StringBuilder
       Private text As String
       
       Public Sub New(sb As StringBuilder, textToFind As String)
          Me.sb = sb
          text = textToFind
       End Sub
       
       Public Function SearchAndAppend(stringToSearch As String) As Boolean
          sb.Append(stringToSearch)
          Return stringToSearch.Contains(text)
       End Function
    End Class
    ' The example displays output similar to the following:
    '    Average Daily Temperature in Degrees Celsius
    '    
    '    5/1/2013: 21.2C
    '    5/2/2013: 16.1C
    '    5/3/2013: 23.5C
    '    5/4/2013: 22.9C
    
  • 호출을 StringBuilder.ToString 변환할 메서드는 StringBuilder 개체를 String 개체.Call the StringBuilder.ToString method to convert the StringBuilder object to a String object. 와 같은 메서드를 사용 하 여 문자열을 검색할 수 있습니다 String.LastIndexOfString.StartsWith, 또는 정규식을 사용할 수 있습니다 및 Regex 패턴을 검색 하는 클래스입니다.You can search the string by using methods such as String.LastIndexOf or String.StartsWith, or you can use regular expressions and the Regex class to search for patterns. 때문에 둘 다 StringBuilderString 문자, 문자, 부분 문자열의 인덱스 위치를 저장 하기 위해 인코딩을 u t F-16을 사용 하 여 개체와 일치 하는 정규식 개체를 모두에서 동일 합니다.Because both StringBuilder and String objects use UTF-16 encoding to store characters, the index positions of characters, substrings, and regular expression matches are the same in both objects. 사용할 수 있습니다 StringBuilder 텍스트에서 발견 되는 동일한 위치에 있는 변경 하는 방법의 String 개체입니다.This enables you to use StringBuilder methods to make changes at the same position at which that text is found in the String object.

    참고

    이 접근 방식을 채택 하면, 하는 경우의 끝에서 작업 해야 합니다 StringBuilder 반복적으로 변환 하지 않아도 되도록 해당 시작 개체는 StringBuilder 개체를 문자열입니다.If you adopt this approach, you should work from the end of the StringBuilder object to its beginning so that you don't have to repeatedly convert the StringBuilder object to a string.

    다음 예제에서 이 방법을 보여 줍니다.The following example illustrates this approach. 4 개에서 영어 알파벳의 각 문자를 저장 하는 StringBuilder 개체입니다.It stores four occurrences of each letter of the English alphabet in a StringBuilder object. 다음에 텍스트를 변환 하는 String 개체 및 각 4 자리 시퀀스의 시작 위치를 식별 하는 정규식을 사용 합니다.It then converts the text to a String object and uses a regular expression to identify the starting position of each four-character sequence. 마지막으로, 첫 번째 시퀀스를 제외 하 고 각 네 자리 시퀀스 앞에 밑줄을 추가 하 고 대문자 시퀀스의 첫 번째 문자를 변환 합니다.Finally, it adds an underscore before each four-character sequence except for the first sequence, and converts the first character of the sequence to uppercase.

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort)'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
          
          // Create a parallel string object.
          String sbString = sb.ToString();
          // Determine where each new character sequence begins.
          String pattern = @"(\w)\1+";
          MatchCollection matches = Regex.Matches(sbString, pattern);
    
          // Uppercase the first occurrence of the sequence, and separate it
          // from the previous sequence by an underscore character.
          for (int ctr = matches.Count - 1; ctr >= 0; ctr--) { 
             Match m = matches[ctr];
             sb[m.Index] = Char.ToUpper(sb[m.Index]);
             if (m.Index > 0) sb.Insert(m.Index, "_");
          }
          // Display the resulting string.
          sbString = sb.ToString();
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Create a parallel string object.
          Dim sbString As String = sb.ToString()
          ' Determine where each new character sequence begins.
          Dim pattern As String = "(\w)\1+"
          Dim matches As MatchCollection = Regex.Matches(sbString, pattern)
    
          ' Uppercase the first occurrence of the sequence, and separate it
          ' from the previous sequence by an underscore character.
          For ctr As Integer = matches.Count - 1 To 0 Step -1 
             Dim m As Match = matches(ctr)
             sb.Chars(m.Index) = Char.ToUpper(sb.Chars(m.index))
             If m.Index > 0 Then sb.Insert(m.Index, "_")
          Next
          ' Display the resulting string.
          sbString = sb.ToString()
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' The example displays the following output:
    '    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    '    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
  • 사용 된 StringBuilder.Chars[Int32] 속성에 있는 문자의 범위를 순차적으로 검색을 StringBuilder 개체.Use the StringBuilder.Chars[Int32] property to sequentially search a range of characters in a StringBuilder object. 검색할 문자의 수 크거나 검색 논리는 특히 복잡 한 경우에이 방법은 실제 수 없습니다.This approach may not be practical if the number of characters to be searched is large or the search logic is particularly complex. 문자 단위로 인덱스 기반 액세스에 대 한 성능에 미치는 영향에 대 한 매우 큰, chunked StringBuilder 개체에 대 한 설명서를 참조 하십시오.는 StringBuilder.Chars[Int32] 속성입니다.For the performance implications of character-by-character index-based access for very large, chunked StringBuilder objects, see the documentation for the StringBuilder.Chars[Int32] property.

    다음 예제에서는 이전 예제 기능에서와 동일 하지만 구현에서 다릅니다.The following example is identical in functionality to the previous example but differs in implementation. 사용 된 Chars[Int32] 문자 값이 변경 하는 시기를 감지 하는 속성의 해당 위치에 밑줄을 삽입 하 고 새 시퀀스에서 첫 번째 문자를 대문자로 변환 합니다.It uses the Chars[Int32] property to detect when a character value has changed, inserts an underscore at that position, and converts the first character in the new sequence to uppercase.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort) 'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
    
          // Iterate the text to determine when a new character sequence occurs.
          int position = 0;
          Char current = '\u0000';
          do {
             if (sb[position] != current) {
                current = sb[position];
                sb[position] = Char.ToUpper(sb[position]);
                if (position > 0) 
                   sb.Insert(position, "_");
                position += 2;
             }
             else {
                position++;
             }      
          } while (position <= sb.Length - 1);
          // Display the resulting string.
          String sbString = sb.ToString();
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Iterate the text to determine when a new character sequence occurs.
          Dim position As Integer = 0
          Dim current As Char = ChrW(0)
          Do
             If sb(position) <> current Then
                current = sb(position)
                sb(position) = Char.ToUpper(sb(position))
                If position > 0 Then sb.Insert(position, "_")
                position += 2
             Else
                position += 1
             End If      
          Loop While position <= sb.Length - 1
          ' Display the resulting string.
          Dim sbString As String = sb.ToString()
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' The example displays the following output:
    '    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    '    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
  • 에 수정 되지 않은 모든 텍스트를 저장할를 StringBuilder 개체를 호출 합니다 StringBuilder.ToString 변환 하는 방법을 StringBuilder 개체를 String 개체를에 수정 작업을 수행는 String 개체.Store all the unmodified text in the StringBuilder object, call the StringBuilder.ToString method to convert the StringBuilder object to a String object, and perform the modifications on the String object. 몇 가지 수정 사항만;에 있는 경우이 방법을 사용할 수 있습니다. 변경할 수 없는 문자열을 사용 하는 비용 사용의 성능 이점 없어질 수 있습니다이 고, 그렇지는 StringBuilder 개체입니다.You can use this approach if you have only a few modifications; otherwise, the cost of working with immutable strings may negate the performance benefits of using a StringBuilder object.

    다음 예제에서는 이전 두 예제 기능에서 동일 하지만 구현에서 다릅니다.The following example is identical in functionality to the previous two examples but differs in implementation. 만듭니다는 StringBuilder 개체를 변환 하는 String 개체를 다음 정규식을 사용 하 여 문자열에서 모든 나머지 수정 작업을 수행 하 합니다.It creates a StringBuilder object, converts it to a String object, and then uses a regular expression to perform all remaining modifications on the string. Regex.Replace(String, String, MatchEvaluator) 메서드 람다 식을 사용 하 여 각 일치 항목에 대체를 수행 합니다.The Regex.Replace(String, String, MatchEvaluator) method uses a lambda expression to perform the replacement on each match.

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort)'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
         
          // Convert it to a string.
          String sbString = sb.ToString();
    
          // Use a regex to uppercase the first occurrence of the sequence, 
          // and separate it from the previous sequence by an underscore.
          string pattern = @"(\w)(\1+)";
          sbString = Regex.Replace(sbString, pattern, 
                                   m => (m.Index > 0 ? "_" : "") + 
                                   m.Groups[1].Value.ToUpper() + 
                                   m.Groups[2].Value);
    
          // Display the resulting string.
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Convert it to a string.
          Dim sbString As String = sb.ToString()
    
          ' Use a regex to uppercase the first occurrence of the sequence, 
          ' and separate it from the previous sequence by an underscore.
          Dim pattern As String = "(\w)(\1+)"
          sbString = Regex.Replace(sbString, pattern, 
                                   Function(m) If(m.Index > 0,"_","") + 
                                               m.Groups(1).Value.ToUpper + 
                                               m.Groups(2).Value)
    
          ' Display the resulting string.
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' The example displays the following output:
    '    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    '    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    

StringBuilder 개체를 문자열로 변환Converting the StringBuilder object to a string

StringBuilder 개체에 표시되는 문자열을 String 매개 변수를 가진 메서드에 전달하거나 사용자 인터페이스에 표시하려면 StringBuilder 개체를 String 개체로 변환해야 합니다.You must convert the StringBuilder object to a String object before you can pass the string represented by the StringBuilder object to a method that has a String parameter or display it in the user interface. 호출 하 여이 변환을 수행 합니다 StringBuilder.ToString 메서드.You perform this conversion by calling the StringBuilder.ToString method. 예시의 경우 호출 하는 이전 예제를 참조 하세요. 합니다 ToString 변환 하는 메서드를 StringBuilder 정규식 메서드에 전달할 수 있도록 하는 문자열 개체입니다.For an illustration, see the previous example, which calls the ToString method to convert a StringBuilder object to a string so that it can be passed to a regular expression method.

Notes to Callers

.NET Core 및.NET Framework 4.0 및 이후 버전에서는 인스턴스화할 때 합니다 StringBuilder 호출 하 여 개체를 StringBuilder(Int32, Int32) 생성자, 길이 및 용량을 합니다 StringBuilder 인스턴스 값 이상으로 증가할 수 해당 MaxCapacity 속성입니다. In .NET Core and in the .NET Framework 4.0 and later versions, when you instantiate the StringBuilder object by calling the StringBuilder(Int32, Int32) constructor, both the length and the capacity of the StringBuilder instance can grow beyond the value of its MaxCapacity property. 특히 호출 하는 경우 발생할 수 있습니다 합니다 Append(String)AppendFormat(String, Object) 작은 문자열을 추가 하는 방법입니다. This can occur particularly when you call the Append(String) and AppendFormat(String, Object) methods to append small strings.

Constructors

StringBuilder() StringBuilder() StringBuilder() StringBuilder()

StringBuilder 클래스의 새 인스턴스를 초기화합니다. Initializes a new instance of the StringBuilder class.

StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32)

지정된 용량을 사용하여 StringBuilder 클래스의 새 인스턴스를 초기화합니다. Initializes a new instance of the StringBuilder class using the specified capacity.

StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32)

지정된 용량으로 시작되어 지정된 최대 용량까지 커질 수 있는 StringBuilder 클래스의 새 인스턴스를 초기화합니다. Initializes a new instance of the StringBuilder class that starts with a specified capacity and can grow to a specified maximum.

StringBuilder(String) StringBuilder(String) StringBuilder(String) StringBuilder(String)

지정된 문자열을 사용하여 StringBuilder 클래스의 새 인스턴스를 초기화합니다. Initializes a new instance of the StringBuilder class using the specified string.

StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32)

지정된 문자열과 용량을 사용하여 StringBuilder 클래스의 새 인스턴스를 초기화합니다. Initializes a new instance of the StringBuilder class using the specified string and capacity.

StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32)

지정된 부분 문자열과 용량을 사용하여 StringBuilder 클래스의 새 인스턴스를 초기화합니다. Initializes a new instance of the StringBuilder class from the specified substring and capacity.

Properties

Capacity Capacity Capacity Capacity

현재 인스턴스에 의해 할당된 메모리에 포함할 수 있는 최대 문자 수를 가져오거나 설정합니다. Gets or sets the maximum number of characters that can be contained in the memory allocated by the current instance.

Chars[Int32] Chars[Int32] Chars[Int32] Chars[Int32]

이 인스턴트에서 특정 위치에 있는 문자를 가져오거나 설정합니다. Gets or sets the character at the specified character position in this instance.

Length Length Length Length

현재 StringBuilder 개체의 길이를 가져오거나 설정합니다. Gets or sets the length of the current StringBuilder object.

MaxCapacity MaxCapacity MaxCapacity MaxCapacity

이 인스턴스의 최대 용량을 가져옵니다. Gets the maximum capacity of this instance.

Methods

Append(Boolean) Append(Boolean) Append(Boolean) Append(Boolean)

지정된 부울 값의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified Boolean value to this instance.

Append(Byte) Append(Byte) Append(Byte) Append(Byte)

지정된 8비트 부호 없는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 8-bit unsigned integer to this instance.

Append(Char) Append(Char) Append(Char) Append(Char)

지정된 Char 개체의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified Char object to this instance.

Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32)

지정된 주소에서 시작하는 유니코드 문자의 배열을 이 인스턴스에 추가합니다. Appends an array of Unicode characters starting at a specified address to this instance.

Append(Char, Int32) Append(Char, Int32) Append(Char, Int32) Append(Char, Int32)

유니코드 문자에 대한 문자열 표현의 지정된 복사본 수를 이 인스턴스에 추가합니다. Appends a specified number of copies of the string representation of a Unicode character to this instance.

Append(Char[]) Append(Char[]) Append(Char[]) Append(Char[])

지정된 배열의 유니코드 문자에 대한 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of the Unicode characters in a specified array to this instance.

Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32)

유니코드 문자의 지정된 하위 배열에 대한 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified subarray of Unicode characters to this instance.

Append(Decimal) Append(Decimal) Append(Decimal) Append(Decimal)

지정된 10진수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified decimal number to this instance.

Append(Double) Append(Double) Append(Double) Append(Double)

지정된 배정밀도 부동 소수점 숫자의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified double-precision floating-point number to this instance.

Append(Int16) Append(Int16) Append(Int16) Append(Int16)

지정된 16비트 부호 있는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 16-bit signed integer to this instance.

Append(Int32) Append(Int32) Append(Int32) Append(Int32)

지정된 32비트 부호 있는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 32-bit signed integer to this instance.

Append(Int64) Append(Int64) Append(Int64) Append(Int64)

지정된 64비트 부호 있는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 64-bit signed integer to this instance.

Append(Object) Append(Object) Append(Object) Append(Object)

지정된 개체의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified object to this instance.

Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>)
Append(SByte) Append(SByte) Append(SByte) Append(SByte)

지정된 8비트 부호 있는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 8-bit signed integer to this instance.

Append(Single) Append(Single) Append(Single) Append(Single)

지정된 단정밀도 부동 소수점 숫자의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified single-precision floating-point number to this instance.

Append(String) Append(String) Append(String) Append(String)

지정된 문자열의 복사본을 이 인스턴스의 끝에 추가합니다. Appends a copy of the specified string to this instance.

Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32)

지정된 부분 문자열의 복사본을 이 인스턴스에 추가합니다. Appends a copy of a specified substring to this instance.

Append(StringBuilder) Append(StringBuilder) Append(StringBuilder) Append(StringBuilder)
Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32)
Append(UInt16) Append(UInt16) Append(UInt16) Append(UInt16)

지정된 16비트 부호 없는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 16-bit unsigned integer to this instance.

Append(UInt32) Append(UInt32) Append(UInt32) Append(UInt32)

지정된 32비트 부호 없는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 32-bit unsigned integer to this instance.

Append(UInt64) Append(UInt64) Append(UInt64) Append(UInt64)

지정된 64비트 부호 없는 정수의 문자열 표현을 이 인스턴스에 추가합니다. Appends the string representation of a specified 64-bit unsigned integer to this instance.

AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object)

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 지정된 형식 공급자를 사용하여 각 서식 항목이 단일 인수의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of a single argument using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object)

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 지정된 형식 공급자를 사용하여 각 형식 항목이 두 인수 중 하나의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of either of two arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object)

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 지정된 형식 공급자를 사용하여 각 형식 항목이 세 인수 중 하나의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of either of three arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[])

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 각 서식 항목은 지정된 서식 공급자를 사용하여 매개 변수 배열에 있는 해당 인수의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of a corresponding argument in a parameter array using a specified format provider.

AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object)

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 각 서식 항목이 단일 인수의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of a single argument.

AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object)

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 각 서식 항목이 두 인수 중 하나의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of either of two arguments.

AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object)

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 각 서식 항목이 세 인수 중 하나의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of either of three arguments.

AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[])

서식 항목이 0개 이상 포함된 복합 서식 문자열을 처리하여 반환된 문자열을 이 인스턴스에 추가합니다. Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 각 형식 항목은 매개 변수 배열에 있는 해당 인수의 문자열 표현으로 바뀝니다. Each format item is replaced by the string representation of a corresponding argument in a parameter array.

AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[])
AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[])
AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[])
AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[])
AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>)
AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>)
AppendLine() AppendLine() AppendLine() AppendLine()

현재 StringBuilder 개체의 끝에 기본 줄 종결자를 추가합니다. Appends the default line terminator to the end of the current StringBuilder object.

AppendLine(String) AppendLine(String) AppendLine(String) AppendLine(String)

현재 StringBuilder 개체의 끝에 지정한 문자열의 복사본과 기본 줄 종결자를 차례로 추가합니다. Appends a copy of the specified string followed by the default line terminator to the end of the current StringBuilder object.

Clear() Clear() Clear() Clear()

현재 StringBuilder 인스턴스에서 모든 문자를 제거합니다. Removes all characters from the current StringBuilder instance.

CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32)

이 인스턴스에서 지정한 세그먼트의 문자를 대상 Char 배열에서 지정한 세그먼트에 복사합니다. Copies the characters from a specified segment of this instance to a specified segment of a destination Char array.

CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32)
EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32)

StringBuilder 인스턴스의 용량이 최소한 지정된 값이 되도록 합니다. Ensures that the capacity of this instance of StringBuilder is at least the specified value.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다. Determines whether the specified object is equal to the current object.

(Inherited from Object)
Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>)
Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder)

이 인스턴스가 지정된 개체와 같은지를 나타내는 값을 반환합니다. Returns a value indicating whether this instance is equal to a specified object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

기본 해시 함수로 작동합니다. Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다. Gets the Type of the current instance.

(Inherited from Object)
Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean)

지정된 문자 위치에 있는 이 인스턴스에 부울 값의 문자열 표현을 삽입합니다. Inserts the string representation of a Boolean value into this instance at the specified character position.

Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte)

지정된 8비트 부호 없는 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a specified 8-bit unsigned integer into this instance at the specified character position.

Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char)

지정된 유니코드 문자의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a specified Unicode character into this instance at the specified character position.

Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[])

지정된 유니코드 문자 배열의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a specified array of Unicode characters into this instance at the specified character position.

Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32)

유니코드 문자의 지정된 하위 배열에 대한 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a specified subarray of Unicode characters into this instance at the specified character position.

Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal)

10진수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a decimal number into this instance at the specified character position.

Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double)

배정밀도 부동 소수점 숫자의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a double-precision floating-point number into this instance at the specified character position.

Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16)

지정된 16비트 부호 있는 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a specified 16-bit signed integer into this instance at the specified character position.

Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32)

지정된 32비트 부호 있는 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a specified 32-bit signed integer into this instance at the specified character position.

Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64)

부호 있는 64비트 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a 64-bit signed integer into this instance at the specified character position.

Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object)

개체의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of an object into this instance at the specified character position.

Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>)
Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte)

지정된 8비트 부호 있는 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a specified 8-bit signed integer into this instance at the specified character position.

Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single)

단정밀도 부동 소수점 숫자의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a single-precision floating point number into this instance at the specified character position.

Insert(Int32, String) Insert(Int32, String) Insert(Int32, String) Insert(Int32, String)

문자열을 지정한 인덱스에 있는 이 인스턴스에 삽입합니다. Inserts a string into this instance at the specified character position.

Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32)

지정된 하나 이상의 문자열의 복사본을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts one or more copies of a specified string into this instance at the specified character position.

Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16)

부호 없는 16비트 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a 16-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32)

부호 없는 32비트 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a 32-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64)

부호 없는 64비트 정수의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다. Inserts the string representation of a 64-bit unsigned integer into this instance at the specified character position.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다. Creates a shallow copy of the current Object.

(Inherited from Object)
Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32)

이 인스턴스에서 지정된 문자 범위를 제거합니다. Removes the specified range of characters from this instance.

Replace(Char, Char) Replace(Char, Char) Replace(Char, Char) Replace(Char, Char)

이 인스턴스에서 발견되는 지정된 문자를 지정된 다른 문자로 모두 바꿉니다. Replaces all occurrences of a specified character in this instance with another specified character.

Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32)

이 인스턴스의 부분 문자열에서 발견되는 지정된 문자를 지정된 다른 문자로 모두 바꿉니다. Replaces, within a substring of this instance, all occurrences of a specified character with another specified character.

Replace(String, String) Replace(String, String) Replace(String, String) Replace(String, String)

이 인스턴스에서 발견되는 지정된 문자열을 지정된 다른 문자열로 모두 바꿉니다. Replaces all occurrences of a specified string in this instance with another specified string.

Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32)

이 인스턴스의 부분 문자열에서 발견되는 지정된 문자열을 지정된 다른 문자열로 모두 바꿉니다. Replaces, within a substring of this instance, all occurrences of a specified string with another specified string.

ToString() ToString() ToString() ToString()

이 인스턴스의 값을 String으로 변환합니다. Converts the value of this instance to a String.

ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32)

이 인스턴스의 부분 문자열 값을 String으로 변환합니다. Converts the value of a substring of this instance to a String.

Explicit Interface Implementations

ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext)

현재 SerializationInfo 개체를 deserialize하는 데 필요한 데이터로 StringBuilder 개체를 채웁니다. Populates a SerializationInfo object with the data necessary to deserialize the current StringBuilder object.

Applies to

See Also