Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

StringBuilder-Klasse

 

Veröffentlicht: Oktober 2016

Stellt eine veränderbare Zeichenfolge dar. Diese Klasse kann nicht vererbt werden.

Um den .NET Framework-Quellcode für diesen Typ zu durchsuchen, finden Sie unter der Reference Source.

Namespace:   System.Text
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Text.StringBuilder

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StringBuilder : ISerializable

NameBeschreibung
System_CAPS_pubmethodStringBuilder()

Initialisiert eine neue Instanz der StringBuilder-Klasse.

System_CAPS_pubmethodStringBuilder(Int32)

Initialisiert eine neue Instanz der StringBuilder-Klasse unter Verwendung der angegebenen Kapazität.

System_CAPS_pubmethodStringBuilder(Int32, Int32)

Initialisiert eine neue Instanz der StringBuilder-Klasse, die bei einer angegebenen Kapazität beginnt, die bis auf ein angegebenes Maximum erhöht werden kann.

System_CAPS_pubmethodStringBuilder(String)

Initialisiert eine neue Instanz der StringBuilder-Klasse unter Verwendung der angegebenen Zeichenfolge.

System_CAPS_pubmethodStringBuilder(String, Int32)

Initialisiert eine neue Instanz der StringBuilder-Klasse unter Verwendung der angegebenen Zeichenfolge und der angegebenen Kapazität.

System_CAPS_pubmethodStringBuilder(String, Int32, Int32, Int32)

Initialisiert eine neue Instanz der StringBuilder-Klasse unter Verwendung der angegebenen Teilzeichenfolge und der angegebenen Kapazität.

NameBeschreibung
System_CAPS_pubpropertyCapacity

Ruft die Höchstanzahl von Zeichen ab, die im durch die aktuelle Instanz reservierten Speicher enthalten sein können, oder legt diese fest.

System_CAPS_pubpropertyChars[Int32]

Ruft das Zeichen an der angegebenen Zeichenposition in dieser Instanz ab oder legt dieses fest.

System_CAPS_pubpropertyLength

Ruft die Länge des aktuellen StringBuilder-Objekts ab oder legt diese fest.

System_CAPS_pubpropertyMaxCapacity

Ruft die maximale Kapazität dieser Instanz ab.

NameBeschreibung
System_CAPS_pubmethodAppend(Boolean)

Fügt die Zeichenfolgendarstellung eines angegebenen booleschen Werts an diese Instanz an.

System_CAPS_pubmethodAppend(Byte)

Fügt die Zeichenfolgendarstellung einer angegebenen 8-Bit-Ganzzahl ohne Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppend(Char)

Fügt die Zeichenfolgendarstellung eines angegebenen Char-Objekts an diese Instanz an.

System_CAPS_pubmethodAppend(Char*, Int32)

Fügt ein Array aus Unicode-Zeichen ab einer angegebenen Adresse an diese Instanz an.

System_CAPS_pubmethodAppend(Char, Int32)

Fügt eine angegebene Anzahl von Kopien der Zeichenfolgendarstellung eines Unicode-Zeichens an diese Instanz an.

System_CAPS_pubmethodAppend(Char[])

Fügt die Zeichenfolgendarstellung der Unicode-Zeichen in einem angegebenen Array an diese Instanz an.

System_CAPS_pubmethodAppend(Char[], Int32, Int32)

Fügt die Zeichenfolgendarstellung eines angegebenen Unterarrays von Unicode-Zeichen an diese Instanz an.

System_CAPS_pubmethodAppend(Decimal)

Fügt die Zeichenfolgendarstellung einer angegebenen Dezimalzahl an diese Instanz an.

System_CAPS_pubmethodAppend(Double)

Fügt die Zeichenfolgendarstellung einer angegebenen Gleitkommazahl mit doppelter Genauigkeit an diese Instanz an.

System_CAPS_pubmethodAppend(Int16)

Fügt die Zeichenfolgendarstellung einer angegebenen 16-Bit-Ganzzahl mit Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppend(Int32)

Fügt die Zeichenfolgendarstellung einer angegebenen 32-Bit-Ganzzahl mit Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppend(Int64)

Fügt die Zeichenfolgendarstellung einer angegebenen 64-Bit-Ganzzahl mit Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppend(Object)

Fügt die Zeichenfolgendarstellung eines angegebenen Objekts an diese Instanz an.

System_CAPS_pubmethodAppend(SByte)

Fügt die Zeichenfolgendarstellung einer angegebenen 8-Bit-Ganzzahl mit Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppend(Single)

Fügt die Zeichenfolgendarstellung einer angegebenen Gleitkommazahl mit einfacher Genauigkeit an diese Instanz an.

System_CAPS_pubmethodAppend(String)

Fügt eine Kopie der angegebenen Zeichenfolge an diese Instanz an.

System_CAPS_pubmethodAppend(String, Int32, Int32)

Fügt eine Kopie einer angegebenen Teilzeichenfolge an diese Instanz an.

System_CAPS_pubmethodAppend(UInt16)

Fügt die Zeichenfolgendarstellung einer angegebenen 16-Bit-Ganzzahl ohne Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppend(UInt32)

Fügt die Zeichenfolgendarstellung einer angegebenen 32-Bit-Ganzzahl ohne Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppend(UInt64)

Fügt die Zeichenfolgendarstellung einer angegebenen 64-Bit-Ganzzahl ohne Vorzeichen an diese Instanz an.

System_CAPS_pubmethodAppendFormat(IFormatProvider, String, Object)

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung eines einzigen Arguments mit einem angegebenen Formatanbieter ersetzt.

System_CAPS_pubmethodAppendFormat(IFormatProvider, String, Object, Object)

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung eines der zwei Argumente mit einem angegebenen Formatanbieter ersetzt.

System_CAPS_pubmethodAppendFormat(IFormatProvider, String, Object, Object, Object)

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung eines der drei Argumente mit einem angegebenen Formatanbieter ersetzt.

System_CAPS_pubmethodAppendFormat(IFormatProvider, String, Object[])

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird von der Zeichenfolgendarstellung eines entsprechenden Arguments in einem Parameterarray ersetzt, das einen angegebenen Formatanbieter verwendet.

System_CAPS_pubmethodAppendFormat(String, Object)

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung eines einzelnen Arguments ersetzt.

System_CAPS_pubmethodAppendFormat(String, Object, Object)

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung für eines von zwei Argumenten ersetzt.

System_CAPS_pubmethodAppendFormat(String, Object, Object, Object)

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung für eines von drei Argumenten ersetzt.

System_CAPS_pubmethodAppendFormat(String, Object[])

Fügt die Zeichenfolge, die durch Verarbeitung einer kombinierten Formatzeichenfolge mit 0 (null) oder mehr Formatelementen zurückgegeben wurde, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung eines entsprechenden Arguments in einem Parameterarray ersetzt.

System_CAPS_pubmethodAppendLine()

Fügt das Standardzeilenabschlusszeichen am Ende des aktuellen StringBuilder-Objekts an.

System_CAPS_pubmethodAppendLine(String)

Fügt eine Kopie der angegebenen Zeichenfolge gefolgt vom Standardzeilenabschlusszeichen am Ende des aktuellen StringBuilder-Objekts an.

System_CAPS_pubmethodClear()

Entfernt alle Zeichen aus der aktuellen StringBuilder-Instanz.

System_CAPS_pubmethodCopyTo(Int32, Char[], Int32, Int32)

Kopiert die Zeichen aus einem angegebenen Segment dieser Instanz in ein angegebenes Segment eines Ziel-Char-Arrays.

System_CAPS_pubmethodEnsureCapacity(Int32)

Stellt sicher, dass die Kapazität dieser Instanz von StringBuilder mindestens gleich dem angegebenen Wert ist.

System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_pubmethodEquals(StringBuilder)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodInsert(Int32, Boolean)

Fügt die Zeichenfolgendarstellung eines booleschen Werts an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Byte)

Fügt die Zeichenfolgendarstellung einer angegebenen 8-Bit-Ganzzahl ohne Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Char)

Fügt die Zeichenfolgendarstellung eines angegebenen Unicode-Zeichens an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Char[])

Fügt die Zeichenfolgendarstellung eines angegebenen Arrays von Unicode-Zeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Char[], Int32, Int32)

Fügt die Zeichenfolgendarstellung eines angegebenen Unterarrays von Unicode-Zeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Decimal)

Fügt die Zeichenfolgendarstellung einer Dezimalzahl an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Double)

Fügt die Zeichenfolgendarstellung einer Gleitkommazahl mit doppelter Genauigkeit an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Int16)

Fügt die Zeichenfolgendarstellung einer angegebenen 16-Bit-Ganzzahl mit Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Int32)

Fügt die Zeichenfolgendarstellung einer angegebenen 32-Bit-Ganzzahl mit Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Int64)

Fügt die Zeichenfolgendarstellung einer 64-Bit-Ganzzahl mit Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Object)

Fügt die Zeichenfolgendarstellung eines Objekts an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, SByte)

Fügt die Zeichenfolgendarstellung einer angegebenen 8-Bit-Ganzzahl mit Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, Single)

Fügt die Zeichenfolgendarstellung einer Gleitkommazahl mit einfacher Genauigkeit an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, String)

Fügt eine Zeichenfolge an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, String, Int32)

Fügt eine oder mehrere Kopien einer angegebenen Zeichenfolge an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, UInt16)

Fügt die Zeichenfolgendarstellung einer 16-Bit-Ganzzahl ohne Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, UInt32)

Fügt die Zeichenfolgendarstellung einer 32-Bit-Ganzzahl ohne Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodInsert(Int32, UInt64)

Fügt die Zeichenfolgendarstellung einer 64-Bit-Ganzzahl ohne Vorzeichen an der angegebenen Zeichenposition in diese Instanz ein.

System_CAPS_pubmethodRemove(Int32, Int32)

Entfernt den angegebenen Bereich von Zeichen aus dieser Instanz.

System_CAPS_pubmethodReplace(Char, Char)

Ersetzt in dieser Instanz alle Vorkommen eines angegebenen Zeichens durch ein anderes angegebenes Zeichen.

System_CAPS_pubmethodReplace(Char, Char, Int32, Int32)

Ersetzt alle Vorkommen eines angegebenen Zeichens in einer Teilzeichenfolge dieser Instanz durch ein anderes angegebenes Zeichen.

System_CAPS_pubmethodReplace(String, String)

Ersetzt in dieser Instanz alle Vorkommen einer angegebenen Zeichenfolge durch eine andere angegebene Zeichenfolge.

System_CAPS_pubmethodReplace(String, String, Int32, Int32)

Ersetzt alle Vorkommen einer angegebenen Zeichenfolge in einer Teilzeichenfolge dieser Instanz durch eine andere angegebene Zeichenfolge.

System_CAPS_pubmethodToString()

Konvertiert den Wert dieser Instanz in einen String.(Überschreibt Object.ToString().)

System_CAPS_pubmethodToString(Int32, Int32)

Konvertiert den Wert einer Teilzeichenfolge dieser Instanz in eine String.

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. Füllt ein System.Runtime.Serialization.SerializationInfo-Objekt mit den Daten, die erforderlich sind, um das aktuelle StringBuilder-Objekt zu deserialisieren.

System_CAPS_noteHinweis

Die .NET Framework-Quellcodes für diesen Typ finden Sie unter der Reference Source. Sie können den Quellcode online Durchsuchen, Referenz für die Offlineanzeige herunterladen und schrittweise durchlaufen (inklusive Patches und Updates) während des Debuggens; see instructions.

Diese Klasse stellt eine Zeichenfolge-Objekt, dessen Wert eine änderbare Sequenz von Zeichen ist.

In diesem Abschnitt

Obwohl sowohl StringBuilder als auch String Sequenzen von Zeichen darstellen, werden sie unterschiedlich implementiert. String ist ein unveränderlicher Typ. D. h. jeder Vorgang, der angezeigt wird, so ändern Sie ein String Objekt tatsächlich eine neue Zeichenfolge erstellt.

Z. B. der Aufruf der String.Concat -Methode im folgenden C#-Beispiel wird angezeigt, so ändern Sie den Wert einer Zeichenfolgenvariablen namens value. In der Tat die Concat -Methode gibt ein value Objekt mit einem anderen Wert und einer Adresse aus der value -Objekt, das an die Methode übergeben wurde. Beachten Sie, dass das Beispiel kompiliert werden muss, mit der /unsafe -Compileroption.

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

Für Routinen, die eine umfangreiche Zeichenfolgen (z. B. apps, die eine Zeichenfolge in einer Schleife mehrere Male ändern) ausführen, kann das Ändern einer Zeichenfolge wiederholt erhebliche Leistungseinbußen genaue. Die Alternative ist die Verwendung StringBuilder, also eine änderbare Zeichenfolge-Klasse. Veränderlichkeit bedeutet, dass eine Instanz der Klasse erstellt wurde, geändert werden können durch Anfügen, ersetzen oder Einfügen von Zeichen. Ein StringBuilder -Objekt verwaltet einen Puffer, um Erweiterungen in der Zeichenfolge aufzunehmen. Wenn Platz verfügbar ist, werden neue Daten in den Puffer angefügt; andernfalls einen neuen Puffer, Daten aus dem ursprünglichen Puffer in den neuen Puffer kopiert und die neuen Daten dann in den neuen Puffer angehängt ist.

System_CAPS_importantWichtig

Obwohl die StringBuilder -Klasse bietet im Allgemeinen eine bessere Leistung als die String -Klasse, Sie sollten nicht automatisch ersetzen String mit StringBuilder jedes Mal, wenn Zeichenfolgen bearbeitet werden soll. Leistung hängt von der Größe der Zeichenfolge, die Größe des Speichers für die neue Zeichenfolge, das System, auf dem Ihre Anwendung ausgeführt wird, und der Typ des Vorgangs zugeordnet werden. Sie sollten darauf vorbereitet sein, testen Sie Ihre Anwendung zu bestimmen, ob StringBuilder bietet eine beträchtliche Leistungssteigerung darstellen.

Verwenden der String Klasse unter diesen Umständen:

  • Wenn die Anzahl der Änderungen, die Ihre app in eine Zeichenfolge werden klein ist. In diesen Fällen StringBuilder möglicherweise unbedeutend Angebot oder keine leistungsverbesserung über String.

  • Wenn Sie eine feste Anzahl von Verkettungsvorgänge, besonders mit Zeichenfolgenliteralen durchführen. In diesem Fall kann der Compiler die Verkettungsvorgänge in einem Vorgang kombinieren.

  • Wenn Sie umfassende Suchfunktionen Vorgänge durchzuführen, während Sie die Zeichenfolge erstellen müssen. Die StringBuilder Klasse besitzt Methoden wie z. B. durchsucht IndexOf oder StartsWith. Sie müssen konvertieren die StringBuilder -Objekt eine String für diese Vorgänge und dadurch die Leistung profitieren negieren können StringBuilder. Weitere Informationen finden Sie unter der Suche den Text in einem StringBuilder-Objekt Abschnitt.

Verwenden der StringBuilder Klasse unter diesen Umständen:

  • Wenn Sie erwarten, dass Ihre app eine unbekannte Anzahl Änderungen in eine Zeichenfolge zur Entwurfszeit (z. B., wenn Sie eine Schleife verwenden eine zufällige Anzahl von Zeichenfolgen verkettet, die Benutzereingaben enthalten) vornehmen.

  • Wenn Sie Ihre app eine bedeutende Anzahl von Änderungen in eine Zeichenfolge zu erwarten.

Die StringBuilder.Length -Eigenschaft gibt die Anzahl der Zeichen an der StringBuilder Objekt zurzeit enthält. Wenn Sie Zeichen zum Hinzufügen der StringBuilder -Objekt, dessen Länge erhöht, bis sie die Größe der entspricht der StringBuilder.Capacity -Eigenschaft, die die Anzahl der Zeichen definiert, die das Objekt enthalten kann. Wenn die Anzahl der hinzugefügten Zeichen bewirkt, die Länge des dass der StringBuilder Objekt größer als die aktuelle Kapazität, neuen Speicher zugewiesen wurde, ist den Wert des der Capacity Eigenschaft verdoppelt, neue Zeichen hinzugefügt werden die StringBuilder -Objekt, und seine Length -Eigenschaft angepasst. Zusätzlicher Speicher für die StringBuilder Objekt wird dynamisch zugewiesen, bis auf den Wert der StringBuilder.MaxCapacity Eigenschaft. Wenn die maximale Kapazität erreicht ist, kann keine weiteren Arbeitsspeicher zugeordnet werden, für die StringBuilder -Objekt, und versuchen, Zeichen hinzufügen oder die maximale Kapazität unschlagbaren löst entweder eine ArgumentOutOfRangeException oder eine OutOfMemoryException Ausnahme.

Im folgende Beispiel wird veranschaulicht, wie ein StringBuilder Objekt weist neue Speicher zu und erhöht die dynamisch erweitert die Zeichenfolge, die dem Objekt zugewiesen wird. Der Code erstellt ein StringBuilder -Objekt durch Aufrufen der (parameterlose) Standardkonstruktor. Die Standardkapazität dieses Objekts ist 16 Zeichen, und die maximale Kapazität ist mehr als 2 Milliarden Zeichen. Anfügen der Zeichenfolge "This is einen Satz an." führt keinen neuen Speicher reservieren, da die Länge der Zeichenfolge (19 Zeichen) die Standardkapazität überschreitet die StringBuilder Objekt. Die Kapazität des Objekts verdoppelt 32 Zeichen lang sein, wird die neue Zeichenfolge hinzugefügt, und die Länge des Objekts entspricht nun 19 Zeichen. Der Code fügt dann die Zeichenfolge "This is einen zusätzlichen Satz." auf den Wert von der StringBuilder 11 Mal Objekt. Der Vorgang wird jedes Mal, wenn die Länge des der StringBuilder -Objekt, die die vorhandene Kapazität übersteigt, verdoppelt und die Append erfolgreich ist.

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

Die Standardkapazität ein StringBuilder Objekt ist 16 Zeichen und ist die standardmäßige maximale Kapazität Int32.MaxValue. Diese Standardwerte werden verwendet, wenn Sie aufrufen, die StringBuilder() und StringBuilder(String) Konstruktoren.

Sie können die Anfangskapazität des explizit definieren ein StringBuilder Objekt auf folgende Weise:

  • Durch das Aufrufen einer von der StringBuilder Konstruktoren, die enthält eine capacity -Parameter beim Erstellen des Objekts.

  • Explizit einen neuen Wert zuweisen der StringBuilder.Capacity Erweitern einer vorhandenen Eigenschaft StringBuilder Objekt. Beachten Sie, dass die Eigenschaft eine Ausnahme auslöst, wenn die neue Kapazität kleiner als die vorhandene Kapazität oder größer als ist die StringBuilder maximale Kapazität des Objekts.

  • Durch Aufrufen der StringBuilder.EnsureCapacity -Methode durch die neue Kapazität. Die neue Kapazität muss nicht größer sein als die StringBuilder maximale Kapazität des Objekts. Anders als bei einer Zuweisung an die Capacity Eigenschaft EnsureCapacity löst keine Ausnahme aus, wenn die gewünschte neue Kapazität ist kleiner als die vorhandene Kapazität; in diesem Fall hat des Methodenaufrufs keine Auswirkungen.

Wenn die Länge der Zeichenfolge zugewiesen der StringBuilder Objekt im Konstruktoraufruf überschreitet die Standardkapazität oder die angegebene Kapazität der Capacity -Eigenschaft wird festgelegt, um die Länge der Zeichenfolge angegeben wird, mit der value Parameter.

Sie können die maximale Kapazität des explizit definieren ein StringBuilder -Objekt durch Aufrufen der StringBuilder(Int32, Int32) Konstruktor. Sie können nicht die maximale Kapazität ändern, indem Sie einen neuen Wert zuweisen der MaxCapacity -Eigenschaft, da sie schreibgeschützt ist.

Wie im vorherigen Abschnitt wird gezeigt, wenn die vorhandene Kapazität unzureichend, wird der zusätzliche Arbeitsspeicher ist reserviert und die Kapazität der ein StringBuilder -Objekt verdoppelt, bis zu dem Wert, der definiert, indem die MaxCapacity Eigenschaft.

Im Allgemeinen sind die Standardkapazität und einer maximalen Kapazität für die meisten apps geeignet. Sie sollten erwägen, diese Werte in den folgenden Situationen:

  • Wenn die tatsächliche Größe der der StringBuilder Objekt wird wahrscheinlich in der Regel über mehrere Megabyte äußerst umfangreich werden. In diesem Fall gibt es möglicherweise einige Leistungsvorteil aus der ersten Capacity Eigenschaft erheblich hoher Wert auf zu viele Speicher neuzuordnungen überflüssig.

  • Wenn Ihre Anwendung auf einem System mit eingeschränktem Arbeitsspeicher ausgeführt wird. Sie möchten in diesem Fall erwägen Sie, ob die MaxCapacity -Eigenschaft kleiner als Int32.MaxValue wenn Ihre app umfangreiche Zeichenfolgen behandelt wird, die Ausführung in einer Umgebung mit eingeschränktem Arbeitsspeicher verursachen können.

Instanziieren Sie ein StringBuilder Objekt durch Aufrufen einer ihrer sechs Konstruktoren von überladene Klasse, die in der folgenden Tabelle aufgeführt sind. Drei Konstruktoren Instanziieren einer StringBuilder Objekt, dessen Wert eine leere Zeichenfolge festgelegt, aber die Capacity und MaxCapacity Werte anders. Definieren Sie die verbleibenden drei Konstruktoren ein StringBuilder -Objekt, das einen bestimmten Zeichenfolgenwert und Kapazität verfügt. Zwei der drei Konstruktoren verwenden Sie die standardmäßige maximale Kapazität des Int32.MaxValue, während das dritte die maximale Kapazität festlegen kann.

Konstruktor

String-Wert

Kapazität

Maximale Kapazität

StringBuilder()

String.Empty

16

Int32.MaxValue

StringBuilder(Int32)

String.Empty

Definiert die capacity Parameter

Int32.MaxValue

StringBuilder(Int32, Int32)

String.Empty

Definiert die capacity Parameter

Definiert die maxCapacity Parameter

StringBuilder(String)

Definiert die value Parameter

16 oder value. Length, welcher Wert größer ist.

Int32.MaxValue

StringBuilder(String, Int32)

Definiert die value Parameter

Definiert die capacity Parameter oder value. Length, welcher Wert größer ist.

Int32.MaxValue

StringBuilder(String, Int32, Int32, Int32)

Definiert value. Substring(startIndex, length)

Definiert die capacity Parameter oder value. Length, welcher Wert größer ist.

Definiert die maxCapacity Parameter

Das folgende Beispiel verwendet drei diese Konstruktorüberladung instanziiert StringBuilder Objekte.

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

Die meisten Methoden, ändern die Zeichenfolge in, eine StringBuilder Instanz einen Verweis auf die gleiche Instanz zurückgeben. Dadurch können Sie aufrufen, StringBuilder Methoden auf zwei Arten:

  • Sie können einzelne Methodenaufrufe und ignoriert den Rückgabewert, wie im folgenden Beispiel wird.

    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.
    
  • Sie können eine Reihe von Methodenaufrufen in einer einzelnen Anweisung vornehmen. Dies kann praktisch sein, wenn eine einzelne Anweisung zu schreiben, die aufeinander folgende Vorgänge verkettet werden soll. Im folgende Beispiel werden drei Methodenaufrufe aus dem vorherigen Beispiel in eine einzige Zeile Code konsolidiert.

    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.
    

Können Sie die Methoden der StringBuilder -Klasse durchlaufen, hinzufügen, löschen oder Ändern von Zeichen in einer StringBuilder Objekt.

Sie erreichen die Zeichen in ein StringBuilder -Objekt mithilfe der StringBuilder.Chars Eigenschaft. C#- Chars ist ein Indexer; in Visual Basic ist es die Standardeigenschaft der StringBuilder Klasse. Dadurch können Sie zum Festlegen oder Abrufen von einzelnen Zeichen mit ihren Index nur ohne ausdrücklichen Verweis auf die Chars Eigenschaft. Zeichen in einem StringBuilder Objekt bei Index 0 (null) beginnen und die zu indizierenden fortsetzen Length - 1.

Das folgende Beispiel veranschaulicht die Chars Eigenschaft. Es fügt zehn Zufallszahlen auf ein StringBuilder -Objekt und durchläuft dann jedes Zeichen. Wenn das Zeichen Unicode-Kategorie ist UnicodeCategory.DecimalDigitNumber, es verringert die Anzahl von 1 (oder die Anzahl in 9 geändert, wenn der Wert 0 ist). Das Beispiel zeigt den Inhalt der StringBuilder Objekt sowohl vor und nach die Werten der einzelnen Zeichen geändert wurden.

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

Die StringBuilder Klasse enthält die folgenden Methoden für den Inhalt einer StringBuilder Objekt:

  • Die Append -Methode fügt eine Zeichenfolge, eine Teilzeichenfolge, ein Array von Zeichen, einen Teil eines Arrays von Zeichen, ein einzelnes Zeichen mehrere Male wiederholt oder die Darstellung eines primitiven Datentyps für einen StringBuilder Objekt.

  • Die AppendLine -Methode fügt ein Zeilenabschlusszeichen oder eine Zeichenfolge zusammen mit einem Zeilenabschlusszeichen an ein StringBuilder Objekt.

  • Die AppendFormat Methode fügt ein zu einem StringBuilder Objekt. Die zeichenfolgendarstellungen von Objekten, die in der Ergebniszeichenfolge enthalten, können die Formatierungskonventionen der aktuellen Systemkultur oder einer angegebenen Kultur widerspiegeln.

  • Die Insert -Methode fügt eine Zeichenfolge, die eine Teilzeichenfolge, die mehrere Wiederholungen einer Zeichenfolge, ein Array von Zeichen, die einen Teil eines Arrays von Zeichen oder die Darstellung eines primitiven Datentyps Geben Sie an einer angegebenen Position in der StringBuilder Objekt. Die Position wird durch einen nullbasierten Index definiert.

Im folgenden Beispiel wird die Append, AppendLine, AppendFormat, und Insert Methoden, um den Text der erweitern ein StringBuilder Objekt.

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            <

Die StringBuilder -Klasse enthält Methoden, die die Größe des aktuellen reduzieren können StringBuilder Instanz. Die Clear -Methode entfernt alle Zeichen und legt die Length -Eigenschaft auf 0 (null). Die Remove -Methode löscht eine angegebene Anzahl von Zeichen ab einer bestimmten Indexposition. Darüber hinaus können Sie Zeichen vom Ende entfernen ein StringBuilder Objekt durch Festlegen seiner Length -Eigenschaft auf einen Wert, der kleiner als die Länge der aktuellen Instanz ist.

Im folgenden Beispiel wird ein Teil des Texts aus einem StringBuilder Objekt zeigt die resultierende Kapazität, maximale Kapazität und Länge Eigenschaftswerte und ruft dann die Clear -Methode entfernt alle Zeichen aus der StringBuilder Objekt.

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

Die StringBuilder.Replace -Methode ersetzt alle Vorkommen eines Zeichens oder einer Zeichenfolge in der gesamten StringBuilder Objekt oder in einem bestimmten Bereich. Im folgenden Beispiel wird die Replace -Methode zum Ersetzen von allen Ausrufezeichen (!) durch Fragezeichen (?) in der StringBuilder Objekt.

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?

Die StringBuilder Klasse enthält keine Methoden, die ähnlich wie die String.Contains, String.IndexOf, und String.StartsWith bereitgestellten Methoden der String -Klasse, die Sie das Objekt für ein bestimmtes Zeichen oder eine Teilzeichenfolge durchsuchen können. Bestimmen das Vorhandensein oder Zeichen, die Anfangsposition einer Teilzeichenfolge erfordert, Suchen einer String Wert mit einer Zeichenfolge Search-Methode oder eine Methode mit regulären Ausdrücken. Es gibt vier Arten Implementieren solcher suchen, wie in der folgenden Tabelle dargestellt.

Verfahren

Experten

Nachteile

Zeichenfolgenwerte vor dem Hinzufügen zum Suchen der StringBuilder Objekt.

Nützlich, um zu bestimmen, ob eine Teilzeichenfolge vorhanden ist.

Kann verwendet werden, wenn der Index einer Teilzeichenfolge wichtig ist.

Rufen Sie ToString und suchen Sie das zurückgegebene String Objekt.

Einfach zu verwenden, wenn Sie alle Text zum Zuweisen einer StringBuilder Objekt, und damit beginnen, ihn zu ändern.

Wiederholten Aufrufen umständlich ToString Wenn Sie Änderungen vornehmen müssen, bevor alle Text hinzugefügt wird die StringBuilder Objekt.

Denken Sie daran arbeiten am Ende der StringBuilder Text des Objekts, wenn Sie Änderungen vornehmen.

Verwenden der Chars Eigenschaft, um einen Bereich von Zeichen nacheinander zu suchen.

Nützlich, wenn Sie einzelne Zeichen oder eine kleine Teilzeichenfolge von Belang sind.

Umständlich, wenn die Anzahl der zu suchenden Zeichen groß ist oder wenn die Suchlogik komplex ist.

Konvertieren der StringBuilder -Objekt an ein String Objekt, und führen Sie die Änderungen auf die String Objekt.

Nützlich, wenn die Anzahl der Änderungen klein ist.

Negiert die Leistungsvorteile der StringBuilder Klasse, wenn die Anzahl der Änderungen groß ist.

Betrachten wir diese Techniken ausführlicher.

  • Wenn das Ziel der Suche ist, um zu bestimmen, ob eine bestimmte Teilzeichenfolge vorhanden ist (d. h., wenn Sie die Position der Teilzeichenfolge nicht), können Sie Zeichenfolgen durchsuchen, vor dem Speichern in der StringBuilder Objekt. Das folgende Beispiel zeigt eine mögliche Implementierung. Definiert eine StringBuilderFinder Klasse übergeben wird, deren Konstruktor wird einen Verweis auf ein StringBuilder -Objekt und die Teilzeichenfolge in der Zeichenfolge gesucht. In diesem Fall wird versucht, zu bestimmen, ob die aufgezeichnete Temperaturen in Fahrenheit oder Celsius sind, und fügt den entsprechenden einführenden Text an den Anfang der StringBuilder Objekt. Ein Zufallszahlen-Generator wird verwendet, um ein Array auswählen, Daten in Grad Celsius oder Grad Fahrenheit enthält.

    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
    
  • Rufen Sie die StringBuilder.ToString -Methode zum Konvertieren der StringBuilder -Objekt an eine String Objekt. Sie können die Zeichenfolge suchen, indem Sie mit Methoden wie String.LastIndexOf oder String.StartsWith, oder Sie können reguläre Ausdrücke und die Regex -Klasse zum Suchen von Mustern. Da beide StringBuilder und String -Objekte verwenden die UTF-16-Codierung, die zum Speichern von Zeichen, die Indexpositionen der Zeichen der Teilzeichenfolgen, und regulären Ausdrucks sind für beide Objekte identisch. Dies ermöglicht Ihnen die Verwendung StringBuilder Methoden an der gleichen Position ändern, an dem der Text, in gefunden wird, der String Objekt.

    System_CAPS_noteHinweis

    Wenn Sie diesen Ansatz verfolgen, sollten Sie am Ende der arbeiten die StringBuilder -Objekt, dessen ab, damit Sie nicht wiederholt konvertieren die StringBuilder -Objekt in eine Zeichenfolge.

    Dieser Ansatz wird anhand des folgenden Beispiels veranschaulicht. Sie speichert vier Vorkommen der einzelnen Buchstaben des englischen Alphabets in ein StringBuilder Objekt. Anschließend konvertiert den Text, der ein String -Objekt und verwendet einen regulären Ausdruck, um die Anfangsposition der Sequenz von vier Zeichen zu identifizieren. Abschließend fügt einen Unterstrich vor jeder Folge aus vier Zeichen mit Ausnahme der ersten Sequenz und das erste Zeichen der Sequenz in Großbuchstaben konvertiert.

    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
    
  • Verwenden der StringBuilder.Chars -Eigenschaft nacheinander suchen Sie einen Bereich von Zeichen in einem StringBuilder Objekt. Dieser Ansatz möglicherweise nicht praktikabel, wenn die Anzahl der zu suchenden Zeichen groß oder die Suchlogik besonders komplex ist.

    Im folgenden Beispiel wird dieselbe Funktion wie im vorherigen Beispiel jedoch unterschiedlich implementiert. Er verwendet die Chars Eigenschaft zu erkennen, wenn ein Zeichenwert geändert hat, Unterstrich an dieser Position eingefügt, und das erste Zeichen in der neuen Sequenz in Großbuchstaben konvertiert.

    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
    
  • Speichern Sie den nicht geänderten Text in die StringBuilder Objekt, rufen Sie die StringBuilder.ToString -Methode zum Konvertieren der StringBuilder -Objekt ein String Objekt, und führen Sie die Änderungen auf die String Objekt. Sie können diesen Ansatz verwenden, wenn Sie nur wenige Änderungen haben; Andernfalls kann die Kosten für das Arbeiten mit unveränderlichen Zeichenfolgen die Leistungsvorteile der Negieren einer StringBuilder Objekt.

    Im folgenden Beispiel wird dieselbe Funktion wie die beiden vorherigen Beispiele jedoch unterschiedlich implementiert. Erstellt ein StringBuilder Objekt, konvertiert es in ein String -Objekt und dann mithilfe eines regulären Ausdrucks die Zeichenfolge alle verbleibenden Änderungen ausführen. Die Regex.Replace(String, String, MatchEvaluator) Methode verwendet einen Lambda-Ausdruck, der Ersatz für jede Übereinstimmung ausführen.

    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
    

Müssen konvertiert die StringBuilder -Objekt ein String -Objekt, bevor Sie die Zeichenfolge dargestellte übergeben können die StringBuilder -Objekt an eine Methode, die eine String Parameter oder in der Benutzeroberfläche angezeigt wird. Sie führen diese Konvertierung durch Aufrufen der StringBuilder.ToString Methode. Zur Veranschaulichung finden Sie im vorherige Beispiel ruft die ToString -Methode zum Konvertieren einer StringBuilder Objekt in eine Zeichenfolge, sodass es an eine Methode für reguläre Ausdrücke übergeben werden kann.

Hinweise für Aufrufer:

In der.NET Framework 4 und die .NET Framework 4.5, die beim Instanziieren der StringBuilder -Objekt durch Aufrufen der StringBuilder(Int32, Int32) -Konstruktor, der Länge und die Kapazität der der StringBuilder Instanz den Wert hinaus anwachsen kann seine MaxCapacity Eigenschaft. Dies kann auftreten, insbesondere beim Aufrufen der Append und AppendFormat Methoden kleine Zeichenfolgen anfügen.

Im folgenden Beispiel wird veranschaulicht, wie viele der definierten Methoden aufrufen, die StringBuilder Klasse.

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

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: