Heim > Artikel > Backend-Entwicklung > Was ist der Zweck der StringBuilder-Klasse in C#?
In C# sind Zeichenfolgen unveränderlich. Dies bedeutet, dass die Zeichenfolge nach der Erstellung nicht mehr geändert werden kann. Jede Änderung an der Zeichenfolge gibt eine neue Zeichenfolge zurück, die die Änderungen enthält, während die ursprüngliche Zeichenfolge unverändert bleibt.
string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddccc
Die StringBuilder-Klasse stellt ein stringähnliches Objekt dar, das geändert werden kann, also eine veränderbare Zeichenfolge. Die Implementierung unterscheidet sich vom String-Typ, der einen unveränderlichen String darstellt.
Da beim Ändern eines String-Objekts eine Kopie erstellt wird, kann das wiederholte Ändern des String-Objekts zu Leistungseinbußen führen. Bei kleinen Wiederholungen ist es vernachlässigbar, bei großen Schleifen kann es jedoch erheblich sein. StringBuilder bietet eine effiziente Alternative zum Ändern von Zeichenfolgen durch Anhängen, Löschen, Ersetzen oder Einfügen von Zeichen.
StringBuilder verwaltet einen internen Puffer zur Speicherung von Zeichen. Wenn im Puffer freier Speicherplatz vorhanden ist, werden neue Daten angehängt. Andernfalls wird ein neuer Puffer erstellt, die alten Daten in den neuen Puffer kopiert und die Daten dann angehängt.
var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa
Im Folgenden sind die verschiedenen Möglichkeiten zum Erstellen eines StringBuilder-Objekts aufgeführt.
// Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 10); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20);
Die StringBuilder-Klasse verfügt über eine Längeneigenschaft, die die Anzahl der Zeichen angibt, die das Objekt derzeit hat. Je mehr Zeichen einem Objekt hinzugefügt werden, desto länger wird es, bis es seine Kapazität erreicht, die die maximale Anzahl von Zeichen definiert, die das Objekt derzeit enthalten kann.
Wenn die Anzahl der hinzugefügten Zeichen dazu führt, dass die Länge ihre aktuelle Kapazität überschreitet, weist die Klasse neuen Speicher zu und koppelt so ihre Kapazität. Das neue Zeichen wird dann dem Objekt hinzugefügt und seine Längeneigenschaft wird angepasst.
StringBuilder fügt dynamisch zusätzlichen Speicher hinzu, bis der Wert der MaxCapacity-Eigenschaft erreicht ist. Danach kann dem Objekt kein Speicher mehr zugewiesen werden. Wenn Sie versuchen, dem Objekt weitere Daten hinzuzufügen, wird eine ArgumentOutOfRangeException- oder OutOfMemoryException-Ausnahme ausgelöst.
StringBuilder bietet die folgenden Methoden zum einfachen Ändern von Zeichenfolgen.
Append – Hängt die Zeichenfolgendarstellung des angegebenen Objekts an diese Instanz an.
AppendFormat – Hängt die Zeichenfolge, die durch die Verarbeitung einer zusammengesetzten Formatzeichenfolge (die null oder mehr Formatelemente enthält) zurückgegeben wird, an diese Instanz an. Jedes Formatelement wird durch die Zeichenfolgendarstellung des entsprechenden Objektparameters ersetzt.
AppendJoin – Verbindet String-Repräsentationsobjekte der Elemente in den bereitgestellten Arrays unter Verwendung des angegebenen Trennzeichens zwischen den einzelnen Elementen und hängt das Ergebnis an die aktuelle Instanz des String-Builders an.
AppendLine – Hängt den Standardzeilenabschluss an das Ende des aktuellen StringBuilder-Objekts an.
Clear – Entfernt alle Zeichen aus der aktuellen StringBuilder-Instanz.
CopyTo – Zeichen in einen Zielzeichenbereich oder ein Zielzeichenarray kopieren.
EnsureCapacity – Stellt sicher, dass die Kapazität dieser StringBuilder-Instanz mindestens dem angegebenen Wert entspricht.
Equals – Gibt „true“ zurück, wenn diese Instanz und die bereitgestellte Instanz gleiche Zeichenfolgen-, Kapazitäts- und MaxCapacity-Werte haben.
GetChunks – Gibt ein Objekt zurück, das zum Durchlaufen von Zeichenblöcken verwendet werden kann.
Insert – Fügt die Zeichenfolgendarstellung des angegebenen Objekts an der angegebenen Zeichenposition in diese Instanz ein.
delete – Entfernt den angegebenen Zeichenbereich aus dieser Instanz.
Ersetzen – Ersetzt alle Vorkommen des angegebenen Zeichens oder der angegebenen Zeichenfolge in dieser Instanz durch ein anderes angegebenes Zeichen oder eine andere angegebene Zeichenfolge.
ToString – Konvertiert die aktuelle Instanz in einen String.
Live-Demonstration
using System; using System.Text; class Program{ static void Main(string[] args){ string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddccc var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa // Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 50); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20); } }
aaabbbccc aaadddccc aaaaaaaaaa
Das obige ist der detaillierte Inhalt vonWas ist der Zweck der StringBuilder-Klasse in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!