10.4 StringBuilder 

Objekte der Klasse String sind unveränderlich, bei jeder Änderung wird ein neues Objekt generiert. Damit ist die Klasse ungeeignet, wenn Texte sehr oft geändert werden. Dafür besser geeignet ist die Klasse StringBuilder im Namensraum System.Text. Das folgende Codefragment zeigt einen Geschwindigkeitsvergleich bei häufigen Änderungen.
'...\Basisklassen\KlasseStringBuilder\Vergleich.vb |
Option Strict On
Namespace Basisklassen
Module Vergleich
Sub Test()
Dim t0 As Date = Now
Dim ts, tb As Long
Dim str As String = ""
For i As Integer = 0 To 100000 : str += "." : Next
ts = Now.Ticks – t0.Ticks
t0 = Now
Dim sb As New Text.StringBuilder()
For i As Integer = 0 To 100000 : sb.Append(".") : Next
tb = Now.Ticks – t0.Ticks
Console.WriteLine("Verhältnis: {0}", ts / tb)
Console.ReadLine()
End Sub
End Module
End Namespace
Die Ausgabe zeigt, dass hier StringBuilder etwa 2000-mal schneller war:
Verhältnis: 1939
Die Klasse StringBuilder hat weniger Möglichkeiten als String. Insbesondere gibt es keine Methoden zur Auswertung oder Extraktion eines Teilstrings.
Hinweis |
Die Methode ToString liefert eine Kopie der Zeichen im StringBuilder-Objekt als String. |
10.4.1 Kapazität 

Nicht immer wird der von einem StringBuilder-Objekt belegte Speicher voll ausgenutzt. Die Anzahl der in dem Objekt speicherbaren Zeichen ist die Kapazität, die gerade gespeicherten Zeichen bestimmen die Länge. Bei Bedarf wird die Kapazität automatisch angepasst und neuer Speicher reserviert (jeweils mindestens Verdopplung). Sie können sie auch festlegen, aber sie darf niemals kleiner als die Länge sein.
10.4.2 Konstruktoren 

Im Konstruktor können Sie eine Initialisierungszeichenfolge und die Kapazität(en) festlegen, die keine Potenz von 2 sein müssen.
Public Sub New() |
Bei Überschreitung der Maximalgröße wird die Ausnahme ArgumentOutOfRangeException ausgelöst.
10.4.3 Eigenschaften 

Außer auf die Kapazitäten (aktuelle und maximale) und die Länge (gerade gespeicherte Zeichen) greift der Indexer auf einzelne Buchstaben zu (siehe Tabelle 10.7). Das folgende Codefragment gibt »4« aus:
Dim sb As New StringBuilder("1234567")
Console.Write(sb(3))
Eigenschaft | Methode | |
Capacity |
Kapazität des StringBuilder-Objekts |
|
Chars |
Das Zeichen an einer Position in der Zeichenfolge (Indexer) |
|
Length |
Die Länge der Zeichenfolge |
|
MaxCapacity |
Die Maximalkapazität des StringBuilder-Objekts |
R |
10.4.4 Methoden 

In der Klasse StringBuilder sind viel weniger Methoden als in String (siehe Tabelle 10.8).
Methode | Eigenschaft |
Append |
Hängt an eine bestehende Instanz eine Zeichenfolge an. |
AppendFormat |
Fügt eine Zeichenfolge mit Formatangaben an. |
AppendLine |
Fügt eine Zeile hinzu. |
CopyTo |
Kopiert einen Teil des Objekts in ein Char-Array. |
EnsureCapacity |
Stellt sicher, dass die Kapazität mindestens so groß ist wie angegeben. |
Insert |
Fügt an einer Position eine Zeichenfolge ein. |
Remove |
Löscht ab einer Position eine Zeichensequenz. |
Replace |
Ersetzt in der gesamten Zeichenfolge ein Zeichen durch ein anderes. |
Zuweisung einer Zeichenkette
Statt einer direkten Zuweisung verwenden Sie Append zum Aufbau von Zeichenfolgen. Alle Überladungen sind als Public Function deklariert.
Append(value As Basis) As StringBuilder |
Durch die Rückgabe eines StringBuilder-Objekts können Sie Befehle aneinanderhängen:
Dim sb As New StringBuilder()
sb.Append("Domkloster ").Append(4).Append(" (Köln)") 'Domkloster 4 (Köln)
Brauchen Sie eine Zeichenkette vom Typ String, liefert ToString eine Kopie der im StringBuilder-Objekt gespeicherten Zeichen.
Einfügen einer Zeichenfolge
Bis auf die Überladung mit dem Wiederholungszeichen hat Insert zu jeder der Überladungen von Append ein Pendant, das als zusätzliches erstes Argument die Einfügeposition angibt.
Dim sb As New StringBuilder()
Console.Write(sb.Append("fällt Schnee").Insert(0, "Im Winter "))
Die Ausgabe dieses Codefragments lautet:
Im Winter fällt Schnee
Löschen aus einer Zeichenfolge
Remove löscht ab der im ersten Argument angegebenen Position die im zweiten Argument angegebene Anzahl Zeichen. Zum Beispiel schreiben Sie zum Löschen der Zeichen 4 und 5:
sbObject.Remove(3, 2)
Ersetzen eines Zeichens oder einer Zeichenfolge
Zu den Ersetzungsmöglichkeiten der Klasse String kommen noch zwei Überladungen, die den Bearbeitungsbereich einschränken. Alle Überladungen sind mit Public Function deklariert.
Replace(alt As Char, neu As Char) As StringBuilder |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.