De StringBuilder-klasse gebruiken in .NET
Het String object is onveranderbaar. Telkens wanneer u een van de methoden in de System.String klasse gebruikt, maakt u een nieuw tekenreeksobject in het geheugen. Hiervoor is een nieuwe toewijzing van ruimte voor dat nieuwe object vereist. In situaties waarin u herhaalde wijzigingen in een tekenreeks moet uitvoeren, kan de overhead die is gekoppeld aan het maken van een nieuw String object kostbaar zijn. De System.Text.StringBuilder klasse kan worden gebruikt wanneer u een tekenreeks wilt wijzigen zonder een nieuw object te maken. Als u bijvoorbeeld de StringBuilder klasse gebruikt, kunt u de prestaties verbeteren wanneer u veel tekenreeksen samenvoegt in een lus.
De System.Text-naamruimte importeren
De StringBuilder klasse vindt u in de System.Text naamruimte. Om te voorkomen dat u een volledig gekwalificeerde typenaam in uw code moet opgeven, kunt u de System.Text naamruimte importeren:
using namespace System;
using namespace System::Text;
using System;
using System.Text;
Imports System.Text
Een StringBuilder-object instantiëren
U kunt een nieuw exemplaar van de StringBuilder klasse maken door de variabele te initialiseren met een van de overbelaste constructormethoden, zoals geïllustreerd in het volgende voorbeeld.
StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
Dim myStringBuilder As New StringBuilder("Hello World!")
De capaciteit en lengte instellen
Hoewel het StringBuilder een dynamisch object is waarmee u het aantal tekens in de tekenreeks kunt uitvouwen dat wordt ingekapseld, kunt u een waarde opgeven voor het maximum aantal tekens dat het kan bevatten. Deze waarde wordt de capaciteit van het object genoemd en mag niet worden verward met de lengte van de tekenreeks die de huidige StringBuilder bevat. U kunt bijvoorbeeld een nieuw exemplaar van de StringBuilder klasse maken met de tekenreeks 'Hallo', met een lengte van 5 en u kunt opgeven dat het object een maximale capaciteit van 25 heeft. Wanneer u de StringBuildergrootte wijzigt, wordt de grootte voor zichzelf pas opnieuw geïmplementeerd als de capaciteit is bereikt. Wanneer dit gebeurt, wordt de nieuwe ruimte automatisch toegewezen en wordt de capaciteit verdubbeld. U kunt de capaciteit van de StringBuilder klasse opgeven met behulp van een van de overbelaste constructors. In het volgende voorbeeld wordt aangegeven dat het myStringBuilder
object kan worden uitgebreid tot maximaal 25 spaties.
StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!", 25);
StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
Dim myStringBuilder As New StringBuilder("Hello World!", 25)
Daarnaast kunt u de eigenschap lezen/schrijven Capacity gebruiken om de maximale lengte van uw object in te stellen. In het volgende voorbeeld wordt de eigenschap Capaciteit gebruikt om de maximale objectlengte te definiëren.
myStringBuilder->Capacity = 25;
myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25
De EnsureCapacity methode kan worden gebruikt om de capaciteit van de huidige StringBuilder te controleren. Als de capaciteit groter is dan de doorgegeven waarde, wordt er geen wijziging aangebracht; Als de capaciteit echter kleiner is dan de doorgegeven waarde, wordt de huidige capaciteit gewijzigd zodat deze overeenkomt met de doorgegeven waarde.
De Length eigenschap kan ook worden bekeken of ingesteld. Als u de eigenschap Lengte instelt op een waarde die groter is dan de eigenschap Capaciteit , wordt de eigenschap Capaciteit automatisch gewijzigd in dezelfde waarde als de eigenschap Lengte . Als u de eigenschap Lengte instelt op een waarde die kleiner is dan de lengte van de tekenreeks in de huidige StringBuilder , wordt de tekenreeks korter.
De StringBuilder String wijzigen
De volgende tabel bevat de methoden die u kunt gebruiken om de inhoud van een StringBuilder te wijzigen.
Methodenaam | Gebruik |
---|---|
StringBuilder.Append | Voegt informatie toe aan het einde van de huidige StringBuilder. |
StringBuilder.AppendFormat | Hiermee vervangt u een opmaakaanduiding die in een tekenreeks wordt doorgegeven door opgemaakte tekst. |
StringBuilder.Insert | Hiermee voegt u een tekenreeks of object in de opgegeven index van de huidige StringBuilder in. |
StringBuilder.Remove | Hiermee verwijdert u een opgegeven aantal tekens uit de huidige StringBuilder. |
StringBuilder.Replace | Vervangt alle exemplaren van een opgegeven teken of tekenreeks in de huidige StringBuilder door een ander opgegeven teken of tekenreeks. |
Toevoegen
De methode Toevoegen kan worden gebruikt om tekst of een tekenreeksweergave van een object toe te voegen aan het einde van een tekenreeks die wordt vertegenwoordigd door de huidige StringBuilder. In het volgende voorbeeld wordt een StringBuilder geïnitialiseerd op 'Hallo wereld' en wordt vervolgens tekst toegevoegd aan het einde van het object. Er wordt automatisch ruimte toegewezen indien nodig.
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.
AppendFormat
Met StringBuilder.AppendFormat de methode wordt tekst toegevoegd aan het einde van het StringBuilder object. Het ondersteunt de functie voor samengestelde opmaak (zie Samengestelde opmaak) door de IFormattable implementatie van het object of de objecten aan te roepen die moeten worden opgemaakt. Daarom accepteert het de standaardnotatietekenreeksen voor numerieke, datum- en tijd- en opsommingswaarden, de aangepaste notatietekenreeksen voor numerieke en datum- en tijdwaarden en de notatietekenreeksen die zijn gedefinieerd voor aangepaste typen. (Zie voor meer informatie over opmaak Opmaaktypen.) U kunt deze methode gebruiken om de indeling van variabelen aan te passen en deze waarden toe te voegen aan een StringBuilder. In het volgende voorbeeld wordt de AppendFormat methode gebruikt om een geheel getal te plaatsen dat is opgemaakt als een valutawaarde aan het einde van een 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
Invoegen
Met de Insert methode wordt een tekenreeks of object toegevoegd aan een opgegeven positie in het huidige StringBuilder object. In het volgende voorbeeld wordt deze methode gebruikt om een woord in te voegen in de zesde positie van een 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!
Verwijderen
U kunt de methode Remove gebruiken om een opgegeven aantal tekens uit het huidige StringBuilder object te verwijderen, te beginnen bij een opgegeven op nul gebaseerde index. In het volgende voorbeeld wordt de methode Remove gebruikt om een StringBuilder object in te korten.
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
Replace
De methode Replace kan worden gebruikt om tekens in het StringBuilder object te vervangen door een ander opgegeven teken. In het volgende voorbeeld wordt de methode Replace gebruikt om een StringBuilder object te doorzoeken op alle exemplaren van het uitroepteken (!) en deze te vervangen door het vraagteken (?).
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?
Een StringBuilder-object converteren naar een tekenreeks
U moet het StringBuilder object converteren naar een String object voordat u de tekenreeks die door het StringBuilder object wordt vertegenwoordigd, kunt doorgeven aan een methode met een String parameter of deze in de gebruikersinterface kunt weergeven. U voert deze conversie uit door de methode aan StringBuilder.ToString te roepen. In het volgende voorbeeld wordt een aantal StringBuilder methoden aangeroepen en vervolgens de StringBuilder.ToString() methode aangeroepen om de tekenreeks weer te geven.
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