Sdílet prostřednictvím


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í

StringBuilder.Append

Připojí informaci na konec současného StringBuilder.

StringBuilder.AppendFormat

Nahradí specifikátor formátu předaný v řetězci s formátovaným textem.

StringBuilder.Insert

Vloží řetězec nebo objekt do zadaného indexu aktuálního StringBuilder.

StringBuilder.Remove

Odebere určený počet znaků z aktuálního StringBuilder.

StringBuilder.Replace

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

System.Text.StringBuilder

Koncepty

Typy formátování

Další zdroje

Základní operace s řetězci

Historie změn

Datum

Poslední dokumenty

Důvod

Přidány informace o StringBuilder- na -String převodu.

Názory zákazníků