Używanie klasy StringBuilder na platformie .NET

Obiekt String jest niezmienny. Za każdym razem, gdy używasz jednej z metod w System.String klasie, należy utworzyć nowy obiekt ciągu w pamięci, który wymaga nowej alokacji miejsca dla tego nowego obiektu. W sytuacjach, w których trzeba wykonać powtarzające się modyfikacje ciągu, obciążenie związane z tworzeniem nowego String obiektu może być kosztowne. Klasę System.Text.StringBuilder można użyć, gdy chcesz zmodyfikować ciąg bez tworzenia nowego obiektu. Na przykład użycie StringBuilder klasy może zwiększyć wydajność podczas łączenia wielu ciągów razem w pętli.

Importowanie przestrzeni nazw System.Text

Klasa StringBuilder znajduje się w System.Text przestrzeni nazw. Aby uniknąć konieczności podania w pełni kwalifikowanej nazwy typu w kodzie, możesz zaimportować System.Text przestrzeń nazw:

using namespace System;
using namespace System::Text;
using System;
using System.Text;
Imports System.Text

Tworzenie wystąpienia obiektu StringBuilder

Możesz utworzyć nowe wystąpienie StringBuilder klasy, inicjując zmienną przy użyciu jednej z metod konstruktora przeciążonego, jak pokazano w poniższym przykładzie.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
Dim myStringBuilder As New StringBuilder("Hello World!")

Ustawianie pojemności i długości

StringBuilder Chociaż obiekt jest obiektem dynamicznym, który umożliwia rozwinięcie liczby znaków w ciągu, który hermetyzuje, można określić wartość maksymalnej liczby znaków, które może przechowywać. Ta wartość jest nazywana pojemnością obiektu i nie powinna być mylona z długością ciągu, który posiada bieżący StringBuilder . Możesz na przykład utworzyć nowe wystąpienie StringBuilder klasy z ciągiem "Hello", który ma długość 5, i można określić, że obiekt ma maksymalną pojemność 25. Podczas modyfikowania obiektu nie powoduje ponownego przydziału rozmiaru StringBuilderdla siebie, dopóki pojemność nie zostanie osiągnięta. W takim przypadku nowe miejsce zostanie przydzielone automatycznie, a pojemność zostanie podwoina. Pojemność klasy można określić StringBuilder przy użyciu jednego z przeciążonych konstruktorów. W poniższym przykładzie określono, że myStringBuilder obiekt można rozszerzyć do maksymalnie 25 spacji.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!", 25);
StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
Dim myStringBuilder As New StringBuilder("Hello World!", 25)

Ponadto można użyć właściwości odczytu/zapisu Capacity , aby ustawić maksymalną długość obiektu. W poniższym przykładzie użyto właściwości Capacity do zdefiniowania maksymalnej długości obiektu.

myStringBuilder->Capacity = 25;
myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25

Metoda EnsureCapacity może służyć do sprawdzania pojemności bieżącego obiektu StringBuilder. Jeśli pojemność jest większa niż przekazana wartość, nie zostanie wprowadzona żadna zmiana; jeśli jednak pojemność jest mniejsza niż przekazana wartość, bieżąca pojemność zostanie zmieniona tak, aby odpowiadała przekazanej wartości.

Właściwość Length można również wyświetlić lub ustawić. Jeśli właściwość Length zostanie ustawiona na wartość większą niż właściwość Capacity, właściwość Capacity zostanie automatycznie zmieniona na tę samą wartość co właściwość Length. Ustawienie właściwości Length na wartość mniejszą niż długość ciągu w bieżącym stringBuilder skraca ciąg.

Modyfikowanie ciągu StringBuilder

W poniższej tabeli wymieniono metody, których można użyć do modyfikowania zawartości obiektu StringBuilder.

Nazwa metody Używanie
StringBuilder.Append Dołącza informacje na końcu bieżącego obiektu StringBuilder.
StringBuilder.AppendFormat Zastępuje specyfikator formatu przekazywany w ciągu sformatowanym tekstem.
StringBuilder.Insert Wstawia ciąg lub obiekt do określonego indeksu bieżącego obiektu StringBuilder.
StringBuilder.Remove Usuwa określoną liczbę znaków z bieżącego obiektu StringBuilder.
StringBuilder.Replace Zastępuje wszystkie wystąpienia określonego znaku lub ciągu w bieżącym StringBuilder innym określonym znakiem lub ciągiem.

Dołączanie

Metoda Append może służyć do dodawania tekstu lub ciągu reprezentacji obiektu na końcu ciągu reprezentowanego przez bieżący element StringBuilder. Poniższy przykład inicjuje element StringBuilder na wartość "Hello World", a następnie dołącza jakiś tekst na końcu obiektu. Miejsce jest przydzielane automatycznie zgodnie z potrzebami.

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

Metoda StringBuilder.AppendFormat dodaje tekst na końcu StringBuilder obiektu. Obsługuje funkcję formatowania złożonego (aby uzyskać więcej informacji, zobacz Formatowanie złożone), wywołując implementację IFormattable obiektu lub obiektów do sformatowania. W związku z tym akceptuje standardowe ciągi formatu dla wartości liczbowych, daty i godziny oraz wyliczenia, ciągów formatu niestandardowego dla wartości liczbowych i daty i godziny oraz ciągów formatu zdefiniowanych dla typów niestandardowych. (Aby uzyskać informacje o formatowaniu, zobacz Typy formatowania). Za pomocą tej metody można dostosować format zmiennych i dołączyć te wartości do klasy StringBuilder. W poniższym przykładzie AppendFormat użyto metody , aby umieścić wartość całkowitą sformatowaną jako wartość waluty na końcu StringBuilder obiektu.

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  

Insert

Metoda Insert dodaje ciąg lub obiekt do określonej pozycji w bieżącym StringBuilder obiekcie. W poniższym przykładzie użyto tej metody, aby wstawić słowo do szóstej StringBuilder pozycji obiektu.

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!

Usuń

Za pomocą metody Remove można usunąć określoną liczbę znaków z bieżącego StringBuilder obiektu, zaczynając od określonego indeksu zero. W poniższym przykładzie użyto metody Remove , aby skrócić StringBuilder obiekt.

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

Metoda Replace może służyć do zastępowania znaków w StringBuilder obiekcie innym określonym znakiem. W poniższym przykładzie użyto metody Replace , aby wyszukać StringBuilder obiekt dla wszystkich wystąpień znaku wykrzyknika (!) i zastąpić je znakiem znaku zapytania (?).

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?

Konwertowanie obiektu StringBuilder na ciąg

Należy przekonwertować StringBuilder obiekt na String obiekt, aby można było przekazać ciąg reprezentowany przez StringBuilder obiekt do metody, która ma String parametr lub wyświetlić go w interfejsie użytkownika. Wykonasz tę konwersję, wywołując metodę StringBuilder.ToString . Poniższy przykład wywołuje kilka StringBuilder metod, a następnie wywołuje metodę StringBuilder.ToString() w celu wyświetlenia ciągu.

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

Zobacz też