Använda Klassen StringBuilder i .NET
Objektet String är oföränderligt. Varje gång du använder någon av metoderna i System.String klassen skapar du ett nytt strängobjekt i minnet, vilket kräver en ny allokering av utrymme för det nya objektet. I situationer där du behöver utföra upprepade ändringar av en sträng kan kostnaderna för att skapa ett nytt String objekt bli kostsamma. Klassen System.Text.StringBuilder kan användas när du vill ändra en sträng utan att skapa ett nytt objekt. Om du till exempel använder StringBuilder klassen kan du öka prestandan när du sammanfogar många strängar i en loop.
Importera namnområdet System.Text
Klassen StringBuilder finns i System.Text namnområdet. För att undvika att behöva ange ett fullständigt kvalificerat typnamn i koden kan du importera System.Text namnområdet:
using namespace System;
using namespace System::Text;
using System;
using System.Text;
Imports System.Text
Instansiera ett StringBuilder-objekt
Du kan skapa en ny instans av StringBuilder klassen genom att initiera variabeln med någon av de överlagrade konstruktormetoderna, som du ser i följande exempel.
StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
Dim myStringBuilder As New StringBuilder("Hello World!")
Ange kapacitet och längd
StringBuilder Även om är ett dynamiskt objekt som gör att du kan expandera antalet tecken i strängen som det kapslar in, kan du ange ett värde för det maximala antalet tecken som det kan innehålla. Det här värdet kallas för objektets kapacitet och bör inte förväxlas med längden på strängen som den aktuella StringBuilder innehåller. Du kan till exempel skapa en ny instans av StringBuilder klassen med strängen "Hello", som har en längd på 5, och du kan ange att objektet har en maximal kapacitet på 25. När du ändrar StringBuilder, omallokerar den inte storleken för sig själv förrän kapaciteten har nåtts. När detta inträffar allokeras det nya utrymmet automatiskt och kapaciteten fördubblas. Du kan ange klassens StringBuilder kapacitet med någon av de överlagrade konstruktörerna. I följande exempel anges att myStringBuilder
objektet kan utökas till högst 25 blanksteg.
StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!", 25);
StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
Dim myStringBuilder As New StringBuilder("Hello World!", 25)
Dessutom kan du använda läs-/skrivegenskapen Capacity för att ange objektets maximala längd. I följande exempel används egenskapen Kapacitet för att definiera den maximala objektlängden.
myStringBuilder->Capacity = 25;
myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25
Metoden EnsureCapacity kan användas för att kontrollera kapaciteten för den aktuella StringBuilder. Om kapaciteten är större än det angivna värdet görs ingen ändring. Men om kapaciteten är mindre än det angivna värdet ändras den aktuella kapaciteten så att den matchar det angivna värdet.
Egenskapen Length kan också visas eller ställas in. Om du anger egenskapen Längd till ett värde som är större än egenskapen Kapacitet ändras egenskapen Kapacitet automatiskt till samma värde som egenskapen Längd. Om egenskapen Längd anges till ett värde som är mindre än längden på strängen i den aktuella StringBuilder förkortas strängen.
Ändra StringBuilder-strängen
I följande tabell visas de metoder som du kan använda för att ändra innehållet i en StringBuilder.
Metodnamn | Använd |
---|---|
StringBuilder.Append | Lägger till information i slutet av den aktuella StringBuilder. |
StringBuilder.AppendFormat | Ersätter en formatspecificerare som skickas i en sträng med formaterad text. |
StringBuilder.Insert | Infogar en sträng eller ett objekt i det angivna indexet för den aktuella StringBuilder. |
StringBuilder.Remove | Tar bort ett angivet antal tecken från den aktuella StringBuilder. |
StringBuilder.Replace | Ersätter alla förekomster av ett angivet tecken eller en sträng i den aktuella StringBuilder med ett annat angivet tecken eller en annan sträng. |
Lägga till
Metoden Lägg till kan användas för att lägga till text eller en strängrepresentation av ett objekt i slutet av en sträng som representeras av den aktuella StringBuilder. I följande exempel initieras en StringBuilder till "Hello World" och lägger sedan till text i slutet av objektet. Utrymme allokeras automatiskt efter behov.
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
Metoden StringBuilder.AppendFormat lägger till text i slutet av StringBuilder objektet. Den stöder funktionen för sammansatt formatering (mer information finns i Sammansatt formatering) genom att anropa IFormattable implementeringen av objektet eller objekten som ska formateras. Därför accepterar den standardformatsträngarna för numeriska värden, datum och tid och uppräkningsvärden, anpassade formatsträngar för numeriska värden och datum- och tidsvärden samt de formatsträngar som definierats för anpassade typer. (Information om formatering finns i Formateringstyper.) Du kan använda den här metoden för att anpassa formatet för variabler och lägga till dessa värden i en StringBuilder. I följande exempel används AppendFormat metoden för att placera ett heltalsvärde formaterat som ett valutavärde i slutet av ett StringBuilder objekt.
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
Infoga
Metoden Insert lägger till en sträng eller ett objekt till en angiven position i det aktuella StringBuilder objektet. I följande exempel används den här metoden för att infoga ett ord i ett objekts StringBuilder sjätte position.
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!
Ta bort
Du kan använda metoden Ta bort för att ta bort ett angivet antal tecken från det aktuella StringBuilder objektet, med början vid ett angivet nollbaserat index. I följande exempel används metoden Ta bort för att förkorta ett StringBuilder objekt.
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
Metoden Ersätt kan användas för att ersätta tecken i StringBuilder objektet med ett annat angivet tecken. I följande exempel används metoden Ersätt för att söka i ett StringBuilder objekt efter alla instanser av utropstecknet (!) och ersätta dem med frågetecknet (?).
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?
Konvertera ett StringBuilder-objekt till en sträng
Du måste konvertera StringBuilder objektet till ett String objekt innan du kan skicka strängen StringBuilder som representeras av objektet till en metod som har en String parameter eller visa det i användargränssnittet. Du gör den här konverteringen StringBuilder.ToString genom att anropa metoden. I följande exempel anropas ett antal StringBuilder metoder och sedan anropas StringBuilder.ToString() metoden för att visa strängen.
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