Verwenden der StringBuilder-Klasse in .NETUsing the StringBuilder Class in .NET

Das String-Objekt ist unveränderlich.The String object is immutable. Jedes Mal, wenn Sie eine der Methoden in der System.String-Klasse verwenden, erstellen Sie ein neues Zeichenfolgenobjekt im Speicher, das eine neue Speicherbelegung für dieses neue Objekt erfordert.Every time you use one of the methods in the System.String class, you create a new string object in memory, which requires a new allocation of space for that new object. In Fällen, in denen Sie wiederholte Änderungen an einer Zeichenfolge vornehmen müssen, kann der Mehraufwand, der mit dem Erstellen eines neuen String-Objekts verbunden ist, erheblich sein.In situations where you need to perform repeated modifications to a string, the overhead associated with creating a new String object can be costly. Die System.Text.StringBuilder-Klasse kann verwendet werden, wenn Sie eine Zeichenfolge ändern möchten, ohne ein neues Objekt zu erstellen.The System.Text.StringBuilder class can be used when you want to modify a string without creating a new object. Beispielsweise lässt sich durch Verwenden der StringBuilder-Klasse die Leistung steigern, wenn zahlreiche Zeichenfolgen in einer Schleife verkettet werden.For example, using the StringBuilder class can boost performance when concatenating many strings together in a loop.

Importieren des System.Text-NamespaceImporting the System.Text Namespace

Die StringBuilder-Klasse befindet sich im System.Text-Namespace.The StringBuilder class is found in the System.Text namespace. Wenn Sie in Ihrem Code nicht den vollqualifizierten Typnamen bereitstellen möchten, können Sie den System.Text-Namespace importieren:To avoid having to provide a fully qualified type name in your code, you can import the System.Text namespace:

using namespace System;
using namespace System::Text;
using System;
using System.Text;
Imports System.Text

Instanziieren eines StringBuilder-ObjektsInstantiating a StringBuilder Object

Sie können eine neue Instanz der StringBuilder-Klasse erstellen, indem Sie Ihre Variable mit einer der Methoden für überladene Konstruktoren initialisieren, wie im folgenden Beispiel verdeutlicht.You can create a new instance of the StringBuilder class by initializing your variable with one of the overloaded constructor methods, as illustrated in the following example.

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

Festlegen von Kapazität und LängeSetting the Capacity and Length

Obwohl ein StringBuilder-Objekt ein dynamisches Objekt ist, das die Erhöhung der Zeichenanzahl der darin gekapselten Zeichenfolge ermöglicht, können Sie einen Wert für die maximale Anzahl von Zeichen festlegen, die das Objekt enthalten darf.Although the StringBuilder is a dynamic object that allows you to expand the number of characters in the string that it encapsulates, you can specify a value for the maximum number of characters that it can hold. Dieser Wert wird als Kapazität des Objekts bezeichnet und darf nicht mit der Länge der Zeichenfolge verwechselt werden, die im aktuellen StringBuilder-Objekt enthalten ist.This value is called the capacity of the object and should not be confused with the length of the string that the current StringBuilder holds. Sie könnten z.B. eine neue Instanz der StringBuilder-Klasse mit der Zeichenfolge „Hello“ erstellen, die eine Länge von 5 Zeichen hat, und angeben, dass das Objekt eine maximale Kapazität von 25 Zeichen hat.For example, you might create a new instance of the StringBuilder class with the string "Hello", which has a length of 5, and you might specify that the object has a maximum capacity of 25. Bei einer Änderung des StringBuilder-Objekts ordnet es sich selbst erst dann eine neue Größe zu, wenn die Kapazität erreicht ist.When you modify the StringBuilder, it does not reallocate size for itself until the capacity is reached. Tritt dieser Fall ein, wird der neue Speicherplatz automatisch zugeordnet, und die Kapazität wird verdoppelt.When this occurs, the new space is allocated automatically and the capacity is doubled. Sie können die Kapazität der StringBuilder-Klasse angeben, indem Sie einen der überladenen Konstruktoren verwenden.You can specify the capacity of the StringBuilder class using one of the overloaded constructors. Im folgenden Beispiel wird festgelegt, dass das myStringBuilder-Objekt auf maximal 25 Zeichen erweitert werden kann.The following example specifies that the myStringBuilder object can be expanded to a maximum of 25 spaces.

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

Darüber hinaus können Sie die Capacity-Eigenschaft mit Lese-/Schreibzugriff verwenden, um die maximale Länge Ihres Objekts festzulegen.Additionally, you can use the read/write Capacity property to set the maximum length of your object. Im folgenden Beispiel wird die Capacity-Eigenschaft verwendet, um die maximale Objektlänge zu definieren.The following example uses the Capacity property to define the maximum object length.

myStringBuilder->Capacity = 25;
myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25

Mithilfe der EnsureCapacity-Methode kann die Kapazität des aktuellen StringBuilder-Objekts überprüft werden.The EnsureCapacity method can be used to check the capacity of the current StringBuilder. Ist die Kapazität größer als der übergebene Wert, wird keine Änderung vorgenommen. Ist die Kapazität dagegen kleiner als der übergebene Wert, wird die aktuelle Kapazität entsprechend dem übergebenen Wert geändert.If the capacity is greater than the passed value, no change is made; however, if the capacity is smaller than the passed value, the current capacity is changed to match the passed value.

Die Length-Eigenschaft kann auch angezeigt oder festgelegt werden.The Length property can also be viewed or set. Wenn Sie für die Length-Eigenschaft einen Wert festlegen, der größer ist als der Wert der Capacity-Eigenschaft, wird die Capacity-Eigenschaft automatisch auf den Wert der Length-Eigenschaft festgelegt.If you set the Length property to a value that is greater than the Capacity property, the Capacity property is automatically changed to the same value as the Length property. Ist die Length-Eigenschaft auf einen Wert festgelegt, der kleiner als die Länge der Zeichenfolge im aktuellen StringBuilder-Objekt ist, wird die Zeichenfolge gekürzt.Setting the Length property to a value that is less than the length of the string within the current StringBuilder shortens the string.

Ändern der StringBuilder-ZeichenfolgeModifying the StringBuilder String

In der folgenden Tabelle sind die Methoden aufgeführt, mit denen Sie den Inhalt eines StringBuilder-Objekts ändern können.The following table lists the methods you can use to modify the contents of a StringBuilder.

MethodennameMethod name MitUse
StringBuilder.Append Fügt Informationen an das Ende des aktuellen StringBuilder-Objekts an.Appends information to the end of the current StringBuilder.
StringBuilder.AppendFormat Ersetzt einen in einer Zeichenfolge übergebenen Formatbezeichner durch formatierten Text.Replaces a format specifier passed in a string with formatted text.
StringBuilder.Insert Fügt eine Zeichenfolge oder ein Objekt in den angegebenen Index des aktuellen StringBuilder-Objekts ein.Inserts a string or object into the specified index of the current StringBuilder.
StringBuilder.Remove Entfernt eine angegebene Anzahl von Zeichen aus dem aktuellen StringBuilder-Objekt.Removes a specified number of characters from the current StringBuilder.
StringBuilder.Replace Ersetzt ein angegebenes Zeichen an einem angegebenen Index.Replaces a specified character at a specified index.

AnfügenAppend

Mithilfe der Append-Methode kann Text oder eine Zeichenfolgendarstellung eines Objekts am Ende einer Zeichenfolge hinzugefügt werden, die durch den aktuellen StringBuilder dargestellt wird.The Append method can be used to add text or a string representation of an object to the end of a string represented by the current StringBuilder. Im folgenden Beispiel wird ein StringBuilder-Objekt auf „Hello World“ initialisiert und anschließend Text am Ende des Objekts angefügt.The following example initializes a StringBuilder to "Hello World" and then appends some text to the end of the object. Speicherplatz wird automatisch nach Bedarf zugeordnet.Space is allocated automatically as needed.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Append(" What a beautiful day.");
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
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.

AppendFormatAppendFormat

Die StringBuilder.AppendFormat-Methode fügt Text am Ende des StringBuilder-Objekts hinzu.The StringBuilder.AppendFormat method adds text to the end of the StringBuilder object. Die Methode unterstützt das Feature für die kombinierte Formatierung (weitere Informationen finden Sie unter Kombinierte Formatierung) durch Aufrufen der IFormattable-Implementierung der Objekte, die formatiert werden sollen.It supports the composite formatting feature (for more information, see Composite Formatting) by calling the IFormattable implementation of the object or objects to be formatted. Daher akzeptiert sie die Standardformatzeichenfolgen für numerische Werte, Datums- und Uhrzeitwerte sowie Enumerationswerte, die benutzerdefinierten Formatzeichenfolgen für numerische Werte sowie Datums- und Uhrzeitwerte und die Formatzeichenfolgen, die für benutzerdefinierte Typen definiert sind.Therefore, it accepts the standard format strings for numeric, date and time, and enumeration values, the custom format strings for numeric and date and time values, and the format strings defined for custom types. (Weitere Informationen zur Formatierung finden Sie unter Formatieren von Typen.) Sie können diese Methode verwenden, um das Format von Variablen anzupassen und diese Werte an ein StringBuilder-Objekt anzufügen.(For information about formatting, see Formatting Types.) You can use this method to customize the format of variables and append those values to a StringBuilder. Im folgenden Beispiel wird die AppendFormat-Methode verwendet, um einen als Währungswert formatierten ganzzahligen Wert am Ende eines StringBuilder-Objekts einzufügen.The following example uses the AppendFormat method to place an integer value formatted as a currency value at the end of a StringBuilder object.

int MyInt = 25;
StringBuilder^ myStringBuilder = gcnew StringBuilder("Your total is ");
myStringBuilder->AppendFormat("{0:C} ", MyInt);
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Your total is $25.00
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  

InsertInsert

Mit der Insert-Methode wird an einer angegebenen Position im aktuellen StringBuilder-Objekt eine Zeichenfolge oder ein Objekt hinzugefügt.The Insert method adds a string or object to a specified position in the current StringBuilder object. Im folgenden Beispiel wird mit dieser Methode ein Wort an der sechsten Position eines StringBuilder-Objekts eingefügt.The following example uses this method to insert a word into the sixth position of a StringBuilder object.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Insert(6,"Beautiful ");
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
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!

RemoveRemove

Über die Remove-Methode können Sie, beginnend bei einem angegebenen nullbasierten Index, eine bestimmte Anzahl von Zeichen aus dem aktuellen StringBuilder-Objekt entfernen.You can use the Remove method to remove a specified number of characters from the current StringBuilder object, beginning at a specified zero-based index. Im folgenden Beispiel wird die Remove-Methode verwendet, um ein StringBuilder-Objekt zu kürzen.The following example uses the Remove method to shorten a StringBuilder object.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Remove(5,7);
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello
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

ErsetzenReplace

Mithilfe der Replace-Methode können Zeichen im StringBuilder-Objekt durch ein anderes angegebenes Zeichen ersetzt werden.The Replace method can be used to replace characters within the StringBuilder object with another specified character. Im folgenden Beispiel wird die Replace-Methode verwendet, um in einem StringBuilder-Objekt nach allen Vorkommen des Ausrufezeichens (!) zu suchen und diese durch das Fragezeichen (?) zu ersetzen.The following example uses the Replace method to search a StringBuilder object for all instances of the exclamation point character (!) and replace them with the question mark character (?).

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Replace('!', '?');
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World?
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?

Konvertieren eines StringBuilder-Objekts in eine ZeichenfolgeConverting a StringBuilder Object to a String

Sie müssen das StringBuilder-Objekt in ein String-Objekt konvertieren, bevor Sie die vom StringBuilder-Objekt dargestellte Zeichenfolge an eine Methode mit einem String-Parameter übergeben können oder diese auf der Benutzeroberfläche anzeigen.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. Diese Konvertierung führen Sie aus, indem Sie die StringBuilder.ToString-Methode aufrufen.You do this conversion by calling the StringBuilder.ToString method. Im folgenden Beispiel werden einige StringBuilder-Methoden und anschließend die StringBuilder.ToString()-Methode aufgerufen, um die Zeichenfolge anzuzeigen.The following example calls a number of StringBuilder methods and then calls the StringBuilder.ToString() method to display the string.

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

Siehe auchSee also