Použití třídy StringBuilder
Objekt String je neměnný. Pokaždé, když použijete jednu z metod ve třídě System.String, vytvoříte tím v paměti nový objekt řetězce, což vyžaduje nové přidělení prostoru pro tento nový objekt. V situacích, kdy je třeba provést opakované změny v řetězci, režie spojená s vytvořením nového objektu String může být nákladná. Třídu System.Text.StringBuilder lze použít, pokud chcete upravit řetězec bez vytvoření nového objektu. Například pomocí třídy StringBuilder se může zvýšit výkon při zřetězení mnoha řetězců společně ve smyčce.
Vytvoření instance objektu StringBuilder
Můžete vytvořit novou instanci třídy StringBuilder vytvořením instance vaší proměnné s jednou z přetížených metod konstruktoru, jak je znázorněno v následujícím příkladu.
Dim MyStringBuilder As New StringBuilder("Hello World!")
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
Nastavení kapacity a délky
Přestože StringBuilder je dynamický objekt, který umožňuje rozšířit počet znaků v řetězci, který jej zapouzdří, můžete zadat hodnotu pro maximální počet znaků, které může pojmout. Tato hodnota se nazývá kapacita objektu a neměla by být zaměněna s délkou řetězece, kterou pojme aktuální StringBuilder. Například, můžete vytvořit novou instanci třídy StringBuilder s řetězcem Hello, o délce 5 a můžete určit, že objekt má maximální kapacitu 25. Když upravíte StringBuilder, nezmění sám velikost, dokud není dosaženo kapacity. V takovém případě je nový prostor přiřazen automaticky a kapacita se zdvojnásobí. Můžete zadat kapacitu třídy StringBuilder pomocí jednoho z přetížených konstruktorů. Následující příklad určuje, že objekt MyStringBuilder lze rozšířit maximálně na 25 míst.
Dim MyStringBuilder As New StringBuilder("Hello World!", 25)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!", 25);
Navíc můžete použít pro čtení i zápis vlastnost Capacity, abyste nastavili maximální délku objektu. Následující příklad používá vlastnost Capacity k definování maximální délky objektu.
MyStringBuilder.Capacity = 25
MyStringBuilder.Capacity = 25;
MyStringBuilder->Capacity = 25;
Metodu EnsureCapacity lze použít, chcete-li zkontrolovat kapacitu aktuálního StringBuilder. Je-li kapacita větší než předaná hodnota, nebudou provedeny žádné změny, avšak jestliže je kapacita menší než předaná hodnota, současná kapacita bude změněna, aby odpovídala předané hodnotě.
Vlastnost Length lze také zobrazit nebo nastavit. Pokud nastavíte vlastnost Length na hodnotu, která je větší než vlastnost Capacity, pak se vlastnost Capacity automaticky změní na stejnou hodnotu jako vlastnost Length. Nastavení vlastnosti Length na hodnotu, která je menší než délka řetězce v současném StringBuilder zkrátí řetězec.
Úprava řetězce StringBuilder
Následující tabulka obsahuje seznam metod, které lze použít k úpravě obsahu StringBuilder.
Název metody |
Pomocí |
---|---|
Připojí informaci na konec současného StringBuilder. |
|
Nahradí specifikátor formátu předaný v řetězci s formátovaným textem. |
|
Vloží řetězec nebo objekt do zadaného indexu aktuálního StringBuilder. |
|
Odebere určený počet znaků z aktuálního StringBuilder. |
|
Nahradí zadaný znak na zadané pozici indexu. |
přidávací
Metoda Append slouží k přidání textu nebo řetězcového vyjádření objektu na konec řetězce, vyjádřeného aktuálním StringBuilder. V následujícím příkladu se inicializuje StringBuilder na Hello World a poté připojí text na konec objektu. Prostor je automaticky přidělen podle potřeby.
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.
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.
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.
AppendFormat
Metoda StringBuilder.AppendFormat přidá text na konec objektu StringBuilder. Podporuje funkci složeného formátování (další informace naleznete v tématu Složené formátování) voláním implementace objektů IFormattable nebo objektů, které mají být formátovány. Proto přijímá standardní formátovací řetězce pro hodnoty numerické, data a času a hodnoty výčtu, vlastní formátovací řetězce pro hodnoty číselné, data a času, a formátovací řetězce definované pro vlastní typy. (Informace o formátování v Typy formátování.) Pomocí této metody můžete přizpůsobit formát proměnných a přidat tyto hodnoty do StringBuilder. Následující příklad používá metodu AppendFormat pro umístění celočíselné hodnoty formátované jako hodnota měny na konci objektu StringBuilder.
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
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
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
Vložení
Metoda Insert přidá řetězec nebo objekt do určené pozice v současném objektu StringBuilder. Následující příklad používá tuto metodu pro vložení slova do šesté pozice objektu StringBuilder.
Dim MyStringBuilder As New 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!
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Insert(6,"Beautiful ");
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
// Hello Beautiful World!
Remove
Můžete použít metodu Remove k odebrání určitého počtu znaků ze současného objektu StringBuilder počínaje zadaným indexem vycházejícím z nuly. Následující příklad používá metodu Remove ke zkrácení objektu StringBuilder.
Dim MyStringBuilder As New 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
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Remove(5,7);
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
// Hello
Replace
Metodu Replace lze použít pro náhradu znaků v objektu StringBuilder za jiný zadaný znak. Následující příklad používá metodu Replace pro vyhledání objektu StringBuilder pro všechny výskyty znaku vykřičník (!) a nahradí je znakem otazník (?).
Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Replace("!"c, "?"c)
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?
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Replace('!', '?');
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
// Hello World?
Převod objektu StringBuilder řetězec
Je nutné převést StringBuilder objekt na String objektu před předat řetězec reprezentován StringBuilder objekt metody, která má String parametr nebo zobrazit uživatelské rozhraní. Není tento převod voláním StringBuilder.ToString metody. V následujícím příkladu volá několik StringBuilder metod a pak volání StringBuilder.ToString() Metoda zobrazení řetězce.
Imports System
Imports System.IO
Imports System.Text
Public Class CharsToStr
Public Shared Sub Main()
' Create an instance of StringBuilder that can then be modified.
Dim sb As New StringBuilder("Some number of characters")
' Define and create an instance of a character array from which
' characters will be read into the StringBuilder.
Dim b() As Char = {" ","t","o"," ","w","r","i","t","e"," ","t","o","."}
' Create an instance of StringWriter
' and attach it to the StringBuilder.
Dim sw As New StringWriter(sb)
' Write three characters from the array into the StringBuilder.
sw.Write(b, 0, 3)
' Display the output.
Console.WriteLine(sb)
' Close the StringWriter.
sw.Close()
End Sub
End Class
using System;
using System.IO;
using System.Text;
public class CharsToStr
{
public static void Main()
{
// Create an instance of StringBuilder that can then be modified.
StringBuilder sb = new StringBuilder("Some number of characters");
// Define and create an instance of a character array from which
// characters will be read into the StringBuilder.
char[] b = {' ','t','o',' ','w','r','i','t','e',' ','t','o','.'};
// Create an instance of StringWriter
// and attach it to the StringBuilder.
StringWriter sw = new StringWriter(sb);
// Write three characters from the array into the StringBuilder.
sw.Write(b, 0, 3);
// Display the output.
Console.WriteLine(sb);
// Close the StringWriter.
sw.Close();
}
}
using namespace System;
using namespace System::IO;
using namespace System::Text;
public ref class CharsToStr
{
public:
static void Main()
{
// Create an instance of StringBuilder that can then be modified.
StringBuilder^ sb = gcnew StringBuilder("Some number of characters");
// Define and create an instance of a character array from which
// characters will be read into the StringBuilder.
array<Char>^ b = {' ','t','o',' ','w','r','i','t','e',' ','t','o','.'};
// Create an instance of StringWriter
// and attach it to the StringBuilder.
StringWriter^ sw = gcnew StringWriter(sb);
// Write three characters from the array into the StringBuilder.
sw->Write(b, 0, 3);
// Display the output.
Console::WriteLine(sb);
// Close the StringWriter.
sw->Close();
}
};
int main()
{
CharsToStr::Main();
}
Viz také
Odkaz
Koncepty
Další zdroje
Historie změn
Datum |
Poslední dokumenty |
Důvod |
---|---|---|
Přidány informace o StringBuilder- na -String převodu. |
Názory zákazníků |