StringBuilder StringBuilder StringBuilder StringBuilder Class

Definicja

Reprezentuje modyfikowalny ciąg znaków.Represents a mutable string of characters. Klasa ta nie może być dziedziczona.This class cannot be inherited.

public ref class StringBuilder sealed : System::Runtime::Serialization::ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class StringBuilder : System.Runtime.Serialization.ISerializable
type StringBuilder = class
    interface ISerializable
Public NotInheritable Class StringBuilder
Implements ISerializable
Dziedziczenie
StringBuilderStringBuilderStringBuilderStringBuilder
Atrybuty
Implementuje

Przykłady

Poniższy przykład pokazuje, jak wywołać wiele metod zdefiniowanych przez StringBuilder klasę.The following example shows how to call many of the methods defined by the StringBuilder class.

using namespace System;
using namespace System::Text;

int main()
{
    // Create a StringBuilder that expects to hold 50 characters.
    // Initialize the StringBuilder with "ABC".
    StringBuilder^ sb = gcnew StringBuilder("ABC", 50);

    // Append three characters (D, E, and F) to the end of the
    // StringBuilder.
    sb->Append(gcnew array<Char>{'D', 'E', 'F'});

    // Append a format string to the end of the StringBuilder.
    sb->AppendFormat("GHI{0}{1}", (Char)'J', (Char)'k');

    // Display the number of characters in the StringBuilder
    // and its string.
    Console::WriteLine("{0} chars: {1}", sb->Length, sb->ToString());

    // Insert a string at the beginning of the StringBuilder.
    sb->Insert(0, "Alphabet: ");

    // Replace all lowercase k's with uppercase K's.
    sb->Replace('k', 'K');

    // Display the number of characters in the StringBuilder
    // and its string.
    Console::WriteLine("{0} chars: {1}", sb->Length, sb->ToString());
}

// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK
using System;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        // Create a StringBuilder that expects to hold 50 characters.
        // Initialize the StringBuilder with "ABC".
        StringBuilder sb = new StringBuilder("ABC", 50);

        // Append three characters (D, E, and F) to the end of the StringBuilder.
        sb.Append(new char[] { 'D', 'E', 'F' });

        // Append a format string to the end of the StringBuilder.
        sb.AppendFormat("GHI{0}{1}", 'J', 'k');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());

        // Insert a string at the beginning of the StringBuilder.
        sb.Insert(0, "Alphabet: ");

        // Replace all lowercase k's with uppercase K's.
        sb.Replace('k', 'K');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());
    }
}

// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK
Imports System.Text

Public Module App 
    Public Sub Main() 
        ' Create a StringBuilder that expects to hold 50 characters.
        ' Initialize the StringBuilder with "ABC".
        Dim sb As New StringBuilder("ABC", 50)

        ' Append three characters (D, E, and F) to the end of the StringBuilder.
        sb.Append(New Char() {"D"c, "E"c, "F"c})

        ' Append a format string to the end of the StringBuilder.
        sb.AppendFormat("GHI{0}{1}", "J"c, "k"c)

        ' Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString())

        ' Insert a string at the beginning of the StringBuilder.
        sb.Insert(0, "Alphabet: ")

        ' Replace all lowercase k's with uppercase K's.
        sb.Replace("k", "K")

        ' Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString())
    End Sub
End Module

' This code produces the following output.
'
' 11 chars: ABCDEFGHIJk
' 21 chars: Alphabet: ABCDEFGHIJK

Uwagi

Ta klasa reprezentuje obiekt podobny do typu String, którego wartość jest modyfikowalną sekwencją znaków.This class represents a string-like object whose value is a mutable sequence of characters.

W tej sekcji:In this section:

Typy ciągów i typy StringBuilderThe String and StringBuilder types

Chociaż StringBuilder iString obie reprezentują sekwencje znaków, są one implementowane inaczej.Although StringBuilder and String both represent sequences of characters, they are implemented differently. Stringjest niezmiennym typem.String is an immutable type. Oznacza to, że każda operacja, która pojawia się String w celu zmodyfikowania obiektu, faktycznie tworzy nowy ciąg.That is, each operation that appears to modify a String object actually creates a new string.

Na przykład, wywołanie String.Concat metody w poniższym C# przykładzie pojawia się, aby zmienić wartość zmiennej ciągu o nazwie value.For example, the call to the String.Concat method in the following C# example appears to change the value of a string variable named value. W rzeczywistości Concat Metoda value zwraca obiekt, który ma inną value wartość i adres z obiektu, który został przesłany do metody.In fact, the Concat method returns a value object that has a different value and address from the value object that was passed to the method. Należy zauważyć, że przykład musi być skompilowany przy /unsafe użyciu opcji kompilatora.Note that the example must be compiled using the /unsafe compiler option.

using System;

public class Example
{
   public unsafe static void Main()
   {
      string value = "This is the first sentence" + ".";
      fixed (char* start = value)
      {
         value = String.Concat(value, "This is the second sentence. ");
         fixed (char* current = value)
         {
            Console.WriteLine(start == current);
         }
      }   
   }
}
// The example displays the following output:
//      False

W przypadku procedur wykonujących rozbudowane manipulowanie ciągami (takie jak aplikacje modyfikujące ciąg wiele razy w pętli) Modyfikowanie ciągu może znacznie powiększyć znaczący spadek wydajności.For routines that perform extensive string manipulation (such as apps that modify a string numerous times in a loop), modifying a string repeatedly can exact a significant performance penalty. Alternatywą jest użycie StringBuildermetody, która jest klasą ciągów modyfikowalnych.The alternative is to use StringBuilder, which is a mutable string class. Zmienność oznacza, że po utworzeniu wystąpienia klasy można je zmodyfikować przez dołączanie, usuwanie, zastępowanie lub wstawianie znaków.Mutability means that once an instance of the class has been created, it can be modified by appending, removing, replacing, or inserting characters. StringBuilder Obiekt zachowuje bufor, aby pomieścić rozszerzenia do ciągu.A StringBuilder object maintains a buffer to accommodate expansions to the string. Nowe dane są dołączane do bufora, jeśli jest dostępne pomieszczenie; w przeciwnym razie przydzielono nowy, większy bufor, dane z oryginalnego buforu są kopiowane do nowego buforu, a nowe dane są następnie dołączane do nowego buforu.New data is appended to the buffer if room is available; otherwise, a new, larger buffer is allocated, data from the original buffer is copied to the new buffer, and the new data is then appended to the new buffer.

Ważne

Mimo że String String StringBuilder Klasa ogólnie oferuje lepszą wydajność niż Klasa, nie należy automatycznie zamieniać przy użyciu, gdy chcesz manipulować ciągami. StringBuilderAlthough the StringBuilder class generally offers better performance than the String class, you should not automatically replace String with StringBuilder whenever you want to manipulate strings. Wydajność zależy od rozmiaru ciągu, ilości pamięci, która ma zostać przypisana do nowego ciągu, systemu, w którym aplikacja jest wykonywana, oraz typu operacji.Performance depends on the size of the string, the amount of memory to be allocated for the new string, the system on which your app is executing, and the type of operation. Należy przygotować się do przetestowania aplikacji, aby określić StringBuilder , czy w rzeczywistości oferuje znaczącą poprawę wydajności.You should be prepared to test your app to determine whether StringBuilder actually offers a significant performance improvement.

Rozważ użycie String klasy w następujących warunkach:Consider using the String class under these conditions:

  • Gdy liczba zmian wprowadzonych w aplikacji w ciągu jest mała.When the number of changes that your app will make to a string is small. W takich przypadkach StringBuilder może oferować nieznaczną wydajność lub Stringzwiększenie wydajności.In these cases, StringBuilder might offer negligible or no performance improvement over String.

  • Gdy wykonujesz stałą liczbę operacji łączenia, szczególnie w przypadku literałów ciągów.When you are performing a fixed number of concatenation operations, particularly with string literals. W takim przypadku kompilator może połączyć operacje łączenia w jedną operację.In this case, the compiler might combine the concatenation operations into a single operation.

  • Gdy musisz wykonać rozbudowane operacje wyszukiwania podczas kompilowania ciągu.When you have to perform extensive search operations while you are building your string. Klasa StringBuilder nie ma metod wyszukiwania, takich jak IndexOf lub StartsWith.The StringBuilder class lacks search methods such as IndexOf or StartsWith. Konieczne będzie przekonwertowanie StringBuilder obiektu String na dla tych operacji. może to Negate korzyść użycia StringBuilder.You'll have to convert the StringBuilder object to a String for these operations, and this can negate the performance benefit from using StringBuilder. Więcej informacji znajduje się w sekcji Wyszukiwanie tekstu w obiekcie StringBuilder .For more information, see the Searching the text in a StringBuilder object section.

Rozważ użycie StringBuilder klasy w następujących warunkach:Consider using the StringBuilder class under these conditions:

  • Gdy oczekujesz, że aplikacja będzie zawierać nieznaną liczbę zmian w ciągu w czasie projektowania (na przykład w przypadku używania pętli do łączenia losowej liczby ciągów zawierających dane wejściowe użytkownika).When you expect your app to make an unknown number of changes to a string at design time (for example, when you are using a loop to concatenate a random number of strings that contain user input).

  • Gdy oczekujesz, że aplikacja wprowadzi znaczną liczbę zmian w ciągu.When you expect your app to make a significant number of changes to a string.

Jak działa StringBuilderHow StringBuilder works

Właściwość wskazuje liczbę znaków, które StringBuilder aktualnie zawiera obiekt. StringBuilder.LengthThe StringBuilder.Length property indicates the number of characters the StringBuilder object currently contains. Jeśli dodasz znaki do StringBuilder obiektu, jego długość zwiększy się, dopóki nie będzie równa rozmiarowi StringBuilder.Capacity właściwości, która definiuje liczbę znaków, które może zawierać obiekt.If you add characters to the StringBuilder object, its length increases until it equals the size of the StringBuilder.Capacity property, which defines the number of characters that the object can contain. Jeśli liczba dodanych znaków powoduje, że długość StringBuilder obiektu przekracza jego bieżącą pojemność, przydzielono nową pamięć, wartość Capacity właściwości jest podwójna, nowe StringBuilder znaki są dodawane do obiektu i jego Lengthwłaściwość jest ustawiona.If the number of added characters causes the length of the StringBuilder object to exceed its current capacity, new memory is allocated, the value of the Capacity property is doubled, new characters are added to the StringBuilder object, and its Length property is adjusted. Dodatkowa pamięć dla StringBuilder obiektu jest przydzielana dynamicznie, dopóki nie osiągnie wartości zdefiniowanej StringBuilder.MaxCapacity przez właściwość.Additional memory for the StringBuilder object is allocated dynamically until it reaches the value defined by the StringBuilder.MaxCapacity property. Po osiągnięciu maksymalnej pojemności nie można przydzielić kolejnej pamięci dla StringBuilder obiektu i próbować dodać znaków lub rozszerzyć go poza maksymalną pojemność ArgumentOutOfRangeException OutOfMemoryException , wyrzuca albo wyjątek.When the maximum capacity is reached, no further memory can be allocated for the StringBuilder object, and trying to add characters or expand it beyond its maximum capacity throws either an ArgumentOutOfRangeException or an OutOfMemoryException exception.

Poniższy przykład ilustruje, jak StringBuilder Obiekt przydziela nową pamięć i zwiększa jego pojemność dynamicznie, gdy ciąg przypisany do obiektu zostanie rozwinięty.The following example illustrates how a StringBuilder object allocates new memory and increases its capacity dynamically as the string assigned to the object expands. Kod tworzy StringBuilder obiekt przez wywołanie jego domyślnego (bezparametrowego) konstruktora.The code creates a StringBuilder object by calling its default (parameterless) constructor. Domyślna pojemność tego obiektu to 16 znaków, a maksymalna pojemność przekracza 2 000 000 000 znaków.The default capacity of this object is 16 characters, and its maximum capacity is more than 2 billion characters. Dołączanie ciągu "to jest zdanie".Appending the string "This is a sentence." powoduje nowe przydzielanie pamięci, ponieważ długość ciągu (19 znaków) przekracza domyślną pojemność StringBuilder obiektu.results in a new memory allocation because the string length (19 characters) exceeds the default capacity of the StringBuilder object. Pojemność obiektu jest podwajana do 32 znaków, nowy ciąg zostanie dodany, a długość obiektu jest teraz równa 19 znaków.The capacity of the object doubles to 32 characters, the new string is added, and the length of the object now equals 19 characters. Następnie kod dołącza ciąg "to jest dodatkowe zdanie".The code then appends the string "This is an additional sentence." do wartości StringBuilder obiektu 11 razy.to the value of the StringBuilder object 11 times. Za każdym razem, gdy operacja dołączania StringBuilder powoduje, że długość obiektu przekracza jego pojemność, jego istniejąca pojemność jest Append podwójna i operacja zakończy się pomyślnie.Whenever the append operation causes the length of the StringBuilder object to exceed its capacity, its existing capacity is doubled and the Append operation succeeds.

using System;
using System.Reflection;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder();
      ShowSBInfo(sb);
      sb.Append("This is a sentence.");
      ShowSBInfo(sb);
      for (int ctr = 0; ctr <= 10; ctr++) {
         sb.Append("This is an additional sentence.");
         ShowSBInfo(sb);
      }   
   }
   
   private static void ShowSBInfo(StringBuilder sb)
   {
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Capacity: 16    MaxCapacity: 2,147,483,647    Length: 0
//    Capacity: 32    MaxCapacity: 2,147,483,647    Length: 19
//    Capacity: 64    MaxCapacity: 2,147,483,647    Length: 50
//    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 81
//    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 112
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 143
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 174
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 205
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 236
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 267
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 298
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 329
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 360
Imports System.Reflection
Imports System.Text

Module Example
   Public Sub Main()
      Dim sb As New StringBuilder()
      ShowSBInfo(sb)
      sb.Append("This is a sentence.")
      ShowSbInfo(sb)
      For ctr As Integer = 0 To 10
         sb.Append("This is an additional sentence.")
         ShowSbInfo(sb)
      Next   
   End Sub
   
   Public Sub ShowSBInfo(sb As StringBuilder)
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'    Capacity: 16    MaxCapacity: 2,147,483,647    Length: 0
'    Capacity: 32    MaxCapacity: 2,147,483,647    Length: 19
'    Capacity: 64    MaxCapacity: 2,147,483,647    Length: 50
'    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 81
'    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 112
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 143
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 174
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 205
'    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 236
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 267
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 298
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 329
'    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 360

Alokacja pamięciMemory allocation

Domyślna pojemność StringBuilder obiektu to 16 znaków, a jego domyślna maksymalna pojemność to Int32.MaxValue.The default capacity of a StringBuilder object is 16 characters, and its default maximum capacity is Int32.MaxValue. Te wartości domyślne są używane w StringBuilder() przypadku wywołania konstruktorów i. StringBuilder(String)These default values are used if you call the StringBuilder() and StringBuilder(String) constructors.

Można jawnie zdefiniować początkową pojemność StringBuilder obiektu w następujący sposób:You can explicitly define the initial capacity of a StringBuilder object in the following ways:

  • Wywoływanie któregokolwiek z StringBuilder konstruktorów, które capacity zawierają parametr podczas tworzenia obiektu.By calling any of the StringBuilder constructors that includes a capacity parameter when you create the object.

  • Przez jawne przypisanie nowej wartości do StringBuilder.Capacity właściwości w celu rozszerzenia istniejącego StringBuilder obiektu.By explicitly assigning a new value to the StringBuilder.Capacity property to expand an existing StringBuilder object. Należy zauważyć, że właściwość zgłasza wyjątek, jeśli nowa pojemność jest mniejsza niż istniejąca pojemność lub większa niż StringBuilder Maksymalna pojemność obiektu.Note that the property throws an exception if the new capacity is less than the existing capacity or greater than the StringBuilder object's maximum capacity.

  • Przez wywołanie StringBuilder.EnsureCapacity metody z nową pojemnością.By calling the StringBuilder.EnsureCapacity method with the new capacity. Nowa pojemność nie może być większa niż StringBuilder Maksymalna pojemność obiektu.The new capacity must not be greater than the StringBuilder object's maximum capacity. Jednak, w przeciwieństwie do przypisania do Capacity właściwości, EnsureCapacity nie zgłasza wyjątku, jeśli żądana Nowa pojemność jest mniejsza niż istniejąca pojemność; w tym przypadku wywołanie metody nie ma żadnego wpływu.However, unlike an assignment to the Capacity property, EnsureCapacity does not throw an exception if the desired new capacity is less than the existing capacity; in this case, the method call has no effect.

Jeśli długość ciągu przypisanego do StringBuilder obiektu w wywołaniu konstruktora przekracza domyślną pojemność lub określoną pojemność Capacity , właściwość jest ustawiona na długość ciągu określonego za pomocą value parametru.If the length of the string assigned to the StringBuilder object in the constructor call exceeds either the default capacity or the specified capacity, the Capacity property is set to the length of the string specified with the value parameter.

Można jawnie zdefiniować maksymalną pojemność StringBuilder obiektu przez StringBuilder(Int32, Int32) wywołanie konstruktora.You can explicitly define the maximum capacity of a StringBuilder object by calling the StringBuilder(Int32, Int32) constructor. Nie można zmienić maksymalnej pojemności, przypisując nową wartość do MaxCapacity właściwości, ponieważ jest tylko do odczytu.You can't change the maximum capacity by assigning a new value to the MaxCapacity property, because it is read-only.

Jak przedstawiono w poprzedniej sekcji, gdy istniejąca pojemność jest niewystarczająca, przydzielono dodatkową pamięć, a pojemność StringBuilder obiektu jest podwajana do wartości zdefiniowanej MaxCapacity przez właściwość.As the previous section shows, whenever the existing capacity is inadequate, additional memory is allocated and the capacity of a StringBuilder object doubles up to the value defined by the MaxCapacity property.

Ogólnie rzecz biorąc, domyślna pojemność i Maksymalna pojemność są odpowiednie dla większości aplikacji.In general, the default capacity and maximum capacity are adequate for most apps. Można rozważyć ustawienie tych wartości w następujących warunkach:You might consider setting these values under the following conditions:

  • Jeśli rozmiar StringBuilder dla obiektu jest prawdopodobnie większy niż duży, zwykle przekracza kilka megabajtów.If the eventual size of the StringBuilder object is likely to grow exceedingly large, typically in excess of several megabytes. W takim przypadku może wystąpić pewne korzyści wynikające z wydajności niż ustawienie właściwości początkowej Capacity na znacznie wysoką wartość, aby wyeliminować konieczność zbyt wielu ponownych alokacji pamięci.In this case, there may be some performance benefit from setting the initial Capacity property to a significantly high value to eliminate the need for too many memory reallocations.

  • Jeśli aplikacja działa w systemie z ograniczoną ilością pamięci.If your app is running on a system with limited memory. W takim przypadku warto rozważyć ustawienie MaxCapacity właściwości na wartość mniejszą niż Int32.MaxValue Jeśli aplikacja obsługuje duże ciągi, które mogą spowodować wykonanie w środowisku z ograniczoną ilością pamięci.In this case, you may want to consider setting the MaxCapacity property to less than Int32.MaxValue if your app is handling large strings that may cause it to execute in a memory-constrained environment.

Utworzenie wystąpienia obiektu StringBuilderInstantiating a StringBuilder object

Utworzenie wystąpienia StringBuilder obiektu przez wywołanie jednego z sześciu przeciążonych konstruktorów klas, które są wymienione w poniższej tabeli.You instantiate a StringBuilder object by calling one of its six overloaded class constructors, which are listed in the following table. Trzy z konstruktorów tworzy StringBuilder wystąpienie obiektu, którego wartość jest pustym ciągiem, ale Capacity ustawia wartości MaxCapacity i w różny sposób.Three of the constructors instantiate a StringBuilder object whose value is an empty string, but set its Capacity and MaxCapacity values differently. Pozostałe trzy konstruktory definiują StringBuilder obiekt z określoną wartością ciągu i pojemnością.The remaining three constructors define a StringBuilder object that has a specific string value and capacity. Dwa z trzech konstruktorów używają domyślnej maksymalnej pojemności Int32.MaxValue, podczas gdy trzecia pozwala ustawić maksymalną pojemność.Two of the three constructors use the default maximum capacity of Int32.MaxValue, whereas the third allows you to set the maximum capacity.

KonstruktorConstructor Wartość ciąguString value PojemnośćCapacity Maksymalna pojemnośćMaximum capacity
StringBuilder() String.Empty 1616 Int32.MaxValue
StringBuilder(Int32) String.Empty Zdefiniowane przez capacity parametrDefined by the capacity parameter Int32.MaxValue
StringBuilder(Int32, Int32) String.Empty Zdefiniowane przez capacity parametrDefined by the capacity parameter Zdefiniowane przez maxCapacity parametrDefined by the maxCapacity parameter
StringBuilder(String) Zdefiniowane przez value parametrDefined by the value parameter 16 lub value.16 or value. Length, w zależności od tego, kto jest większyLength, whichever is greater Int32.MaxValue
StringBuilder(String, Int32) Zdefiniowane przez value parametrDefined by the value parameter Zdefiniowane przez capacity parametr lub value.Defined by the capacity parameter or value. Length, w zależności od tego, co jest większe.Length, whichever is greater. Int32.MaxValue
StringBuilder(String, Int32, Int32, Int32) Zdefiniowane przez value.Defined by value. Substring(startIndex, length)Substring(startIndex, length) Zdefiniowane przez capacity parametr lub value.Defined by the capacity parameter or value. Length, w zależności od tego, co jest większe.Length, whichever is greater. Zdefiniowane przez maxCapacity parametrDefined by the maxCapacity parameter

W poniższym przykładzie zastosowano trzy z tych przeciążeń StringBuilder konstruktora, aby utworzyć wystąpienie obiektów.The following example uses three of these constructor overloads to instantiate StringBuilder objects.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      string value = "An ordinary string";
      int index = value.IndexOf("An ") + 3;
      int capacity = 0xFFFF;
      
      // Instantiate a StringBuilder from a string.
      StringBuilder sb1 = new StringBuilder(value);
      ShowSBInfo(sb1); 
      
      // Instantiate a StringBuilder from string and define a capacity.  
      StringBuilder sb2 = new StringBuilder(value, capacity);   
      ShowSBInfo(sb2); 
      
      // Instantiate a StringBuilder from substring and define a capacity.  
      StringBuilder sb3 = new StringBuilder(value, index, 
                                            value.Length - index, 
                                            capacity );
      ShowSBInfo(sb3); 
   }

   public static void ShowSBInfo(StringBuilder sb)
   {
      Console.WriteLine("\nValue: {0}", sb.ToString());
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Value: An ordinary string
//    Capacity: 18    MaxCapacity: 2,147,483,647    Length: 18
//    
//    Value: An ordinary string
//    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 18
//    
//    Value: ordinary string
//    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 15
Imports System.Text

Module Example
   Public Sub Main()
      Dim value As String = "An ordinary string"
      Dim index As Integer = value.IndexOf("An ") + 3
      Dim capacity As Integer = &hFFFF
      
      ' Instantiate a StringBuilder from a string.
      Dim sb1 As New StringBuilder(value)
      ShowSBInfo(sb1) 
      
      ' Instantiate a StringBuilder from string and define a capacity.  
      Dim sb2 As New StringBuilder(value, capacity)   
      ShowSBInfo(sb2) 
      
      ' Instantiate a StringBuilder from substring and define a capacity.  
      Dim sb3 As New StringBuilder(value, index, 
                                   value.Length - index, 
                                   capacity )
      ShowSBInfo(sb3) 
   End Sub
   
   Public Sub ShowSBInfo(sb As StringBuilder)
      Console.WriteLine()
      Console.WriteLine("Value: {0}", sb.ToString())
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'    Value: An ordinary string
'    Capacity: 18    MaxCapacity: 2,147,483,647    Length: 18
'    
'    Value: An ordinary string
'    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 18
'    
'    Value: ordinary string
'    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 15

Wywołanie metod StringBuilderCalling StringBuilder methods

Większość metod modyfikujących ciąg w StringBuilder wystąpieniu zwraca odwołanie do tego samego wystąpienia.Most of the methods that modify the string in a StringBuilder instance return a reference to that same instance. Umożliwia to wywoływanie StringBuilder metod na dwa sposoby:This enables you to call StringBuilder methods in two ways:

  • Można wykonać poszczególne wywołania metod i zignorować wartość zwracaną, jak pokazano w poniższym przykładzie.You can make individual method calls and ignore the return value, as the following example does.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          StringBuilder sb = new StringBuilder();
          sb.Append("This is the beginning of a sentence, ");
          sb.Replace("the beginning of ", "");
          sb.Insert(sb.ToString().IndexOf("a ") + 2, "complete ");
          sb.Replace(",", ".");
          Console.WriteLine(sb.ToString());
       }
    }
    // The example displays the following output:
    //        This is a complete sentence.
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim sb As New StringBuilder()
          sb.Append("This is the beginning of a sentence, ")
          sb.Replace("the beginning of ", "")
          sb.Insert(sb.ToString().IndexOf("a ") + 2, "complete ")
          sb.Replace(",", ".")
          Console.WriteLine(sb.ToString())
       End Sub
    End Module
    ' The example displays the following output:
    '       This is a complete sentence.
    
  • W jednej instrukcji można wykonać serię wywołań metod.You can make a series of method calls in a single statement. Może to być wygodne, jeśli chcesz napisać pojedynczą instrukcję, która tworzy łańcuch kolejnych operacji.This can be convenient if you want to write a single statement that chains successive operations. Poniższy przykład konsoliduje trzy wywołania metody z poprzedniego przykładu w jeden wiersz kodu.The following example consolidates three method calls from the previous example into a single line of code.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          StringBuilder sb = new StringBuilder("This is the beginning of a sentence, ");
          sb.Replace("the beginning of ", "").Insert(sb.ToString().IndexOf("a ") + 2, 
                                                     "complete ").Replace(",", ".");
          Console.WriteLine(sb.ToString());
       }
    }
    // The example displays the following output:
    //        This is a complete sentence.
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim sb As New StringBuilder("This is the beginning of a sentence, ")
          sb.Replace("the beginning of ", "").Insert(sb.ToString().IndexOf("a ") + 2, _
                                                     "complete ").Replace(", ", ".")
          Console.WriteLine(sb.ToString())
       End Sub
    End Module
    ' The example displays the following output:
    '       This is a complete sentence.
    

Przeprowadzanie operacji StringBuilderPerforming StringBuilder operations

Metody StringBuilder klasy służą do iteracji, dodawania, usuwania lub modyfikowania znaków StringBuilder w obiekcie.You can use the methods of the StringBuilder class to iterate, add, delete, or modify characters in a StringBuilder object.

Iterowanie znaków StringBuilderIterating StringBuilder characters

Dostęp do znaków w StringBuilder obiekcie można uzyskać za StringBuilder.Chars[Int32] pomocą właściwości.You can access the characters in a StringBuilder object by using the StringBuilder.Chars[Int32] property. W C#, Chars[Int32] jest indeksatorem; w Visual Basic jest to właściwość StringBuilder domyślna klasy.In C#, Chars[Int32] is an indexer; in Visual Basic, it is the default property of the StringBuilder class. Pozwala to na ustawienie lub pobranie pojedynczych znaków przy użyciu tylko ich indeksu, bez jawnego odwoływania Chars[Int32] się do właściwości.This enables you to set or retrieve individual characters by using their index only, without explicitly referencing the Chars[Int32] property. Znaki w StringBuilder obiekcie zaczynają się od indeksu 0 (zero) i przejdź do Length indeksu-1.Characters in a StringBuilder object begin at index 0 (zero) and continue to index Length - 1.

Poniższy przykład ilustruje Chars[Int32] właściwość.The following example illustrates the Chars[Int32] property. Dodaje dziesięć liczb losowych do StringBuilder obiektu, a następnie iteruje każdy znak.It appends ten random numbers to a StringBuilder object, and then iterates each character. Jeśli kategoria Unicode znaku jest UnicodeCategory.DecimalDigitNumber, zmniejsza liczbę o 1 (lub zmienia liczbę na 9, jeśli jej wartość jest równa 0).If the character's Unicode category is UnicodeCategory.DecimalDigitNumber, it decreases the number by 1 (or changes the number to 9 if its value is 0). Przykład wyświetla zawartość StringBuilder obiektu przed i po zmianie wartości poszczególnych znaków.The example displays the contents of the StringBuilder object both before and after the values of individual characters were changed.

using System;
using System.Globalization;
using System.Text;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      StringBuilder sb = new StringBuilder();
      
      // Generate 10 random numbers and store them in a StringBuilder.
      for (int ctr = 0; ctr <= 9; ctr++)
         sb.Append(rnd.Next().ToString("N5"));    

      Console.WriteLine("The original string:");
      Console.WriteLine(sb.ToString());
            
      // Decrease each number by one.
      for (int ctr = 0; ctr < sb.Length; ctr++) {
         if (Char.GetUnicodeCategory(sb[ctr]) == UnicodeCategory.DecimalDigitNumber) {
            int number = (int) Char.GetNumericValue(sb[ctr]);
            number--;
            if (number < 0) number = 9;
         
            sb[ctr] = number.ToString()[0];
         }
      }
      Console.WriteLine("\nThe new string:");
      Console.WriteLine(sb.ToString());
   }
}
// The example displays the following output:
//    The original string:
//    1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
//    000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
//    .00000
//    
//    The new string:
//    0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
//    999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
//    .99999
Imports System.Globalization
Imports System.Text

Module Example
   Public Sub Main()
      Dim rnd As New Random()
      Dim sb As New StringBuilder()
      
      ' Generate 10 random numbers and store them in a StringBuilder.
      For ctr As Integer = 0 To 9
         sb.Append(rnd.Next().ToString("N5"))    
      Next
      Console.WriteLine("The original string:")
      Console.WriteLine(sb.ToString())
      Console.WriteLine()
            
      ' Decrease each number by one.
      For ctr As Integer = 0 To sb.Length - 1
         If Char.GetUnicodeCategory(sb(ctr)) = UnicodeCategory.DecimalDigitNumber Then
            Dim number As Integer = CType(Char.GetNumericValue(sb(ctr)), Integer)
            number -= 1
            If number < 0 Then number = 9
         
            sb(ctr) = number.ToString()(0)
         End If
      Next
      Console.WriteLine("The new string:")
      Console.WriteLine(sb.ToString())
   End Sub
End Module
' The example displays the following output:
'    The original string:
'    1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
'    000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
'    .00000
'    
'    The new string:
'    0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
'    999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
'    .99999

Za pomocą opartego na znakach indeksowanie z Chars[Int32] właściwość może być bardzo wolne działanie w następujących warunkach:Using character-based indexing with the Chars[Int32] property can be extremely slow under the following conditions:

Jest znaczny wpływ na wydajność, ponieważ dostęp do każdego znaku opisano połączone całą listę fragmentach, aby znaleźć poprawne buforu na indeksowanie.Performance is severely impacted because each character access walks the entire linked list of chunks to find the correct buffer to index into.

Uwaga

Nawet w przypadku dużych "podzielonym" StringBuilder obiektu przy użyciu Chars[Int32] właściwość opartego na indeksie dostęp do jednej lub niewielkiej liczby znaków ma wpływ na wydajność niewielkie; zazwyczaj jest 0(n) operacji.Even for a large "chunky" StringBuilder object, using the Chars[Int32] property for index-based access to one or a small number of characters has a negligible performance impact; typically, it is an 0(n) operation. Wpływ na wydajność znaczące występuje podczas iteracji znaków w StringBuilder obiektu, który jest O(n^2) operacji.The significant performance impact occurs when iterating the characters in the StringBuilder object, which is an O(n^2) operation.

Jeśli napotkasz problemy z wydajnością, korzystając z opartego na znakach indeksowanie za pomocą StringBuilder obiektów, możesz użyć dowolnej z poniższych rozwiązań:If you encounter performance issues when using character-based indexing with StringBuilder objects, you can use any of the following workarounds:

  • Konwertuj StringBuilder wystąpienia do String przez wywołanie metody ToString metody, uzyskiwać dostęp do znaków w ciągu.Convert the StringBuilder instance to a String by calling the ToString method, then access the characters in the string.

  • Skopiuj zawartość istniejącego StringBuilder nowy obiekt wstępnie wielkości StringBuilder obiektu.Copy the contents of the existing StringBuilder object to a new pre-sized StringBuilder object. Zwiększa wydajność, ponieważ nowy StringBuilder obiekt nie jest podzielonym.Performance improves because the new StringBuilder object is not chunky. Na przykład:For example:

    // sbOriginal is the existing StringBuilder object
    var sbNew = new StringBuilder(sbOriginal.ToString(), sbOriginal.Length);
    
    ' sbOriginal is the existing StringBuilder object
    Dim sbNew = New StringBuilder(sbOriginal.ToString(), sbOriginal.Length)
    
  • Ustaw początkową pojemność StringBuilder obiektu wartość, która jest w przybliżeniu równa maksymalny rozmiar oczekiwany przez wywołanie metody StringBuilder(Int32) konstruktora.Set the initial capacity of the StringBuilder object to a value that is approximately equal to its maximum expected size by calling the StringBuilder(Int32) constructor. Należy pamiętać, że to przydziela cały blok pamięci nawet wtedy, gdy StringBuilder rzadko osiąga limit maksymalnej pojemności.Note that this allocates the entire block of memory even if the StringBuilder rarely reaches its maximum capacity.

Dodawanie tekstu do obiektu StringBuilderAdding text to a StringBuilder object

Klasa zawiera następujące metody rozszerzania zawartości StringBuilder obiektu: StringBuilderThe StringBuilder class includes the following methods for expanding the contents of a StringBuilder object:

  • Metoda dołącza ciąg, podciąg, tablicę znaków, część tablicy znaków, pojedynczy znak wielokrotnie powtórzony lub ciąg reprezentujący typ danych pierwotnych StringBuilder do obiektu. AppendThe Append method appends a string, a substring, a character array, a portion of a character array, a single character repeated multiple times, or the string representation of a primitive data type to a StringBuilder object.

  • Metoda dołącza terminator wiersza lub ciąg wraz z terminatorem wiersza StringBuilder do obiektu. AppendLineThe AppendLine method appends a line terminator or a string along with a line terminator to a StringBuilder object.

  • Metoda dołącza do StringBuilder obiektu ciąg formatu złożonego. AppendFormatThe AppendFormat method appends a composite format string to a StringBuilder object. Reprezentacje ciągów obiektów uwzględnionych w ciągu wynikowym mogą odzwierciedlać konwencje formatowania bieżącej kultury systemowej lub określoną kulturę.The string representations of objects included in the result string can reflect the formatting conventions of the current system culture or a specified culture.

  • Metoda wstawia ciąg, podciąg, wiele powtórzeń ciągu, tablicę znaków, część tablicy znaków lub ciąg reprezentujący typ danych pierwotnych w określonej pozycji StringBuilder w obiekcie. InsertThe Insert method inserts a string, a substring, multiple repetitions of a string, a character array, a portion of a character array, or the string representation of a primitive data type at a specified position in the StringBuilder object. Pozycja jest definiowana przez indeks (liczony od zera).The position is defined by a zero-based index.

W poniższym przykładzie zastosowano Appendmetody AppendLine, AppendFormat,, Insert StringBuilder i, aby rozwinąć tekst obiektu.The following example uses the Append, AppendLine, AppendFormat, and Insert methods to expand the text of a StringBuilder object.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      // Create a StringBuilder object with no text.
      StringBuilder sb = new StringBuilder();
      // Append some text.
      sb.Append('*', 10).Append(" Adding Text to a StringBuilder Object ").Append('*', 10);
      sb.AppendLine("\n");
      sb.AppendLine("Some code points and their corresponding characters:");
      // Append some formatted text.
      for (int ctr = 50; ctr <= 60; ctr++) {
         sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr));
         sb.AppendLine();
      }
      // Find the end of the introduction to the column.
      int pos = sb.ToString().IndexOf("characters:") + 11 + 
                Environment.NewLine.Length;
      // Insert a column header.
      sb.Insert(pos, String.Format("{2}{0,12:X4} {1,12}{2}", "Code Unit", 
                                   "Character", "\n"));      

      // Convert the StringBuilder to a string and display it.      
      Console.WriteLine(sb.ToString());      
   }
}
// The example displays the following output:
//    ********** Adding Text to a StringBuilder Object **********
//    
//    Some code points and their corresponding characters:
//    
//       Code Unit    Character
//            0032            2
//            0033            3
//            0034            4
//            0035            5
//            0036            6
//            0037            7
//            0038            8
//            0039            9
//            003A            :
//            003B            ;
//            003C            <
Imports System.Text

Module Example
   Public Sub Main()
      ' Create a StringBuilder object with no text.
      Dim sb As New StringBuilder()
      ' Append some text.
      sb.Append("*"c, 10).Append(" Adding Text to a StringBuilder Object ").Append("*"c, 10)
      sb.AppendLine()
      sb.AppendLine()
      sb.AppendLine("Some code points and their corresponding characters:")
      ' Append some formatted text.
      For ctr = 50 To 60
         sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr))
         sb.AppendLine()
      Next
      ' Find the end of the introduction to the column.
      Dim pos As Integer = sb.ToString().IndexOf("characters:") + 11 + 
                           Environment.NewLine.Length
      ' Insert a column header.
      sb.Insert(pos, String.Format("{2}{0,12:X4} {1,12}{2}", "Code Unit", 
                                   "Character", vbCrLf))      

      ' Convert the StringBuilder to a string and display it.      
      Console.WriteLine(sb.ToString())      
   End Sub
End Module
' The example displays the following output:
'       ********** Adding Text to a StringBuilder Object **********
'       
'       Some code points and their corresponding characters:
'       
'          Code Unit    Character
'               0032            2
'               0033            3
'               0034            4
'               0035            5
'               0036            6
'               0037            7
'               0038            8
'               0039            9
'               003A            :
'               003B            ;
'               003C            <

Usuwanie tekstu z obiektu StringBuilderDeleting text from a StringBuilder object

Klasa zawiera metody, które mogą zmniejszyć rozmiar bieżącego StringBuilder wystąpienia. StringBuilderThe StringBuilder class includes methods that can reduce the size of the current StringBuilder instance. Metoda usuwa wszystkie znaki i Length ustawia właściwość na zero. ClearThe Clear method removes all characters and sets the Length property to zero. Remove Metoda usuwa określoną liczbę znaków, zaczynając od określonej pozycji indeksu.The Remove method deletes a specified number of characters starting at a particular index position. Ponadto można usunąć znaki z końca StringBuilder obiektu przez ustawienie jego Length właściwości na wartość, która jest mniejsza niż długość bieżącego wystąpienia.In addition, you can remove characters from the end of a StringBuilder object by setting its Length property to a value that is less than the length of the current instance.

Poniższy przykład usuwa część tekstu z StringBuilder obiektu, wyświetla jego wyniki, maksymalną pojemność i długość wartości właściwości, a następnie Clear wywołuje metodę w celu usunięcia StringBuilder wszystkich znaków z obiektu.The following example removes some of the text from a StringBuilder object, displays its resulting capacity, maximum capacity, and length property values, and then calls the Clear method to remove all the characters from the StringBuilder object.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder("A StringBuilder object");
      ShowSBInfo(sb);
      // Remove "object" from the text.
      string textToRemove = "object";
      int pos = sb.ToString().IndexOf(textToRemove);
      if (pos >= 0) {
         sb.Remove(pos, textToRemove.Length);
         ShowSBInfo(sb);
      }
      // Clear the StringBuilder contents.
      sb.Clear();
      ShowSBInfo(sb);   
   }

   public static void ShowSBInfo(StringBuilder sb)
   {
      Console.WriteLine("\nValue: {0}", sb.ToString());
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Value: A StringBuilder object
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 22
//    
//    Value: A StringBuilder
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 16
//    
//    Value:
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 0
Imports System.Text

Module Example
   Public Sub Main()
      Dim sb As New StringBuilder("A StringBuilder object")
      ShowSBInfo(sb)
      ' Remove "object" from the text.
      Dim textToRemove As String = "object"
      Dim pos As Integer = sb.ToString().IndexOf(textToRemove)
      If pos >= 0
         sb.Remove(pos, textToRemove.Length)
         ShowSBInfo(sb)
      End If
      ' Clear the StringBuilder contents.
      sb.Clear()
      ShowSBInfo(sb)   
   End Sub

   Public Sub ShowSBInfo(sb As StringBuilder)
      Console.WriteLine()
      Console.WriteLine("Value: {0}", sb.ToString())
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'    Value: A StringBuilder object
'    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 22
'    
'    Value: A StringBuilder
'    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 16
'    
'    Value:
'    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 0

Modyfikowanie tekstu w obiekcie StringBuilderModifying the text in a StringBuilder object

Metoda zastępuje wszystkie wystąpienia znaku lub ciągu w całym StringBuilder obiekcie lub w określonym zakresie znaków. StringBuilder.ReplaceThe StringBuilder.Replace method replaces all occurrences of a character or a string in the entire StringBuilder object or in a particular character range. W poniższym przykładzie użyto metody Replace , aby zamienić wszystkie wykrzykniki (!) na znaki zapytania (?) StringBuilder w obiekcie.The following example uses the Replace method to replace all exclamation points (!) with question marks (?) in the StringBuilder object.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
      MyStringBuilder.Replace('!', '?');
      Console.WriteLine(MyStringBuilder);
   }
}
// The example displays the following output:
//       Hello World?
Imports System.Text

Module Example
   Public Sub Main()
      Dim MyStringBuilder As New StringBuilder("Hello World!")
      MyStringBuilder.Replace("!"c, "?"c)
      Console.WriteLine(MyStringBuilder)
   End Sub
End Module
' The example displays the following output:
'       Hello World?

Wyszukiwanie tekstu w obiekcie StringBuilderSearching the text in a StringBuilder object

String.IndexOf String.Contains String String.StartsWith Klasa nie obejmuje metod podobnych do metod,, i dostarczonych przez klasę, które umożliwiają przeszukiwanie obiektu pod kątem określonego znaku lub podciągu. StringBuilderThe StringBuilder class does not include methods similar to the String.Contains, String.IndexOf, and String.StartsWith methods provided by the String class, which allow you to search the object for a particular character or a substring. Określenie obecności lub początkowego położenia znaku podciągu wymaga przeszukiwania String wartości przy użyciu metody wyszukiwania ciągów lub metody wyrażenia regularnego.Determining the presence or starting character position of a substring requires that you search a String value by using either a string search method or a regular expression method. Istnieją cztery sposoby implementacji takich wyszukiwań, jak pokazano w poniższej tabeli.There are four ways to implement such searches, as the following table shows.

ZajmujeTechnique SpecjaliściPros WadyCons
Wyszukaj wartości ciągu przed dodaniem ich do StringBuilder obiektu.Search string values before adding them to the StringBuilder object. Przydatne do określania, czy podciąg istnieje.Useful for determining whether a substring exists. Nie można użyć, gdy pozycja indeksu podciągu jest ważna.Cannot be used when the index position of a substring is important.
Wywołaj ToString i Przeszukaj String zwrócony obiekt.Call ToString and search the returned String object. Łatwe w użyciu, Jeśli przypiszesz cały tekst do StringBuilder obiektu, a następnie zaczniesz go modyfikować.Easy to use if you assign all the text to a StringBuilder object, and then begin to modify it. Nieskomplikowany do ToString wielokrotnego wywołania, jeśli musisz wprowadzić modyfikacje przed dodaniem StringBuilder całego tekstu do obiektu.Cumbersome to repeatedly call ToString if you must make modifications before all text is added to the StringBuilder object.

Należy pamiętać, aby zacząć od końca StringBuilder tekstu obiektu, jeśli wprowadzasz zmiany.You must remember to work from the end of the StringBuilder object's text if you're making changes.
Użyj właściwości Chars[Int32] , aby sekwencyjnie przeszukiwać zakres znaków.Use the Chars[Int32] property to sequentially search a range of characters. Przydatne w przypadku, gdy użytkownik korzysta z pojedynczych znaków lub małego podciągu.Useful if you're concerned with individual characters or a small substring. Nieskomplikowany, jeśli liczba znaków do wyszukania jest duża lub jeśli logika wyszukiwania jest złożona.Cumbersome if the number of characters to search is large or if the search logic is complex.

Wynikiem jest bardzo niska wydajność dla obiektów, które są bardzo duże przez powtarzające się wywołania metod.Results in very poor performance for objects that have grown very large through repeated method calls.
Przekonwertuj String String obiekt na obiekt i wykonaj modyfikacje obiektu. StringBuilderConvert the StringBuilder object to a String object, and perform modifications on the String object. Przydatne, jeśli liczba modyfikacji jest mała.Useful if the number of modifications is small. Wyklucza korzyść wydajności klasy, StringBuilder Jeśli liczba modyfikacji jest duża.Negates the performance benefit of the StringBuilder class if the number of modifications is large.

Sprawdźmy, czy te techniki są bardziej szczegółowe.Let's examine these techniques in greater detail.

  • Jeśli celem wyszukiwania jest określenie, czy określony podciąg istnieje (to znaczy, jeśli nie interesują się pozycja podciągu), można wyszukiwać ciągi przed ich zapisaniem w StringBuilder obiekcie.If the goal of the search is to determine whether a particular substring exists (that is, if you aren't interested in the position of the substring), you can search strings before storing them in the StringBuilder object. W poniższym przykładzie przedstawiono jedną możliwą implementację.The following example provides one possible implementation. Definiuje StringBuilderFinder klasę, której Konstruktor przeszedł odwołanie StringBuilder do obiektu i podciągu, który ma zostać znaleziony w ciągu.It defines a StringBuilderFinder class whose constructor is passed a reference to a StringBuilder object and the substring to find in the string. W takim przypadku przykład próbuje określić, czy zarejestrowane temperatury są w liczbie Fahrenheita lub Celsjusza, i dodaje odpowiedni tekst wprowadzający na początku StringBuilder obiektu.In this case, the example tries to determine whether recorded temperatures are in Fahrenheit or Celsius, and adds the appropriate introductory text to the beginning of the StringBuilder object. Generator liczb losowych służy do wybierania tablicy zawierającej dane w stopniach Celsjusza lub stopni Fahrenheita.A random number generator is used to select an array that contains data in either degrees Celsius or degrees Fahrenheit.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          Random rnd = new Random();
          string[] tempF = { "47.6F", "51.3F", "49.5F", "62.3F" };
          string[] tempC = { "21.2C", "16.1C", "23.5C", "22.9C" };
          string[][] temps = { tempF, tempC }; 
    
          StringBuilder sb = new StringBuilder();
          var f = new StringBuilderFinder(sb, "F");
          var baseDate = new DateTime(2013, 5, 1); 
          String[] temperatures = temps[rnd.Next(2)];
          bool isFahrenheit = false;
          foreach (var temperature in temperatures) {
             if (isFahrenheit)
                sb.AppendFormat("{0:d}: {1}\n", baseDate, temperature);
             else
                isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}\n", 
                                                 baseDate, temperature));
             baseDate = baseDate.AddDays(1);
          }            
          if (isFahrenheit) {
             sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit");
             sb.Insert(47, "\n\n");
          }
          else {
             sb.Insert(0, "Average Daily Temperature in Degrees Celsius");
             sb.Insert(44, "\n\n");
          }   
          Console.WriteLine(sb.ToString());
       }
    }
    
    public class StringBuilderFinder
    {
       private StringBuilder sb;
       private String text;
       
       public StringBuilderFinder(StringBuilder sb, String textToFind)
       {
          this.sb = sb;
          this.text = textToFind;
       }
       
       public bool SearchAndAppend(String stringToSearch)
       {
          sb.Append(stringToSearch);
          return stringToSearch.Contains(text);
       }
    }
    // The example displays output similar to the following:
    //    Average Daily Temperature in Degrees Celsius
    //    
    //    5/1/2013: 21.2C
    //    5/2/2013: 16.1C
    //    5/3/2013: 23.5C
    //    5/4/2013: 22.9C
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim rnd As New Random()
          Dim tempF() As String = { "47.6F", "51.3F", "49.5F", "62.3F" }
          Dim tempC() As String = { "21.2C", "16.1C", "23.5C", "22.9C" }
          Dim temps()() As String = { tempF, tempC } 
    
          Dim sb As StringBuilder = New StringBuilder()
          Dim f As New StringBuilderFinder(sb, "F")
          Dim baseDate As New DateTime(2013, 5, 1) 
          Dim temperatures() As String = temps(rnd.Next(2))
          Dim isFahrenheit As Boolean = False
          For Each temperature In temperatures
             If isFahrenheit Then
                sb.AppendFormat("{0:d}: {1}{2}", baseDate, temperature, vbCrLf)
             Else
                isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}{2}", 
                                                 baseDate, temperature, vbCrLf))
             End If
             baseDate = baseDate.AddDays(1)
          Next            
          If isFahrenheit Then
             sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit")
             sb.Insert(47, vbCrLf + vbCrLf)
          Else
             sb.Insert(0, "Average Daily Temperature in Degrees Celsius")
             sb.Insert(44, vbCrLf + vbCrLf)
          End If   
          Console.WriteLine(sb.ToString())
       End Sub
    End Module
    
    Public Class StringBuilderFinder
       Private sb As StringBuilder
       Private text As String
       
       Public Sub New(sb As StringBuilder, textToFind As String)
          Me.sb = sb
          text = textToFind
       End Sub
       
       Public Function SearchAndAppend(stringToSearch As String) As Boolean
          sb.Append(stringToSearch)
          Return stringToSearch.Contains(text)
       End Function
    End Class
    ' The example displays output similar to the following:
    '    Average Daily Temperature in Degrees Celsius
    '    
    '    5/1/2013: 21.2C
    '    5/2/2013: 16.1C
    '    5/3/2013: 23.5C
    '    5/4/2013: 22.9C
    
  • Wywołaj StringBuilder.ToString metodę, aby StringBuilder przekonwertować obiekt na String obiekt.Call the StringBuilder.ToString method to convert the StringBuilder object to a String object. Możesz przeszukać ciąg za pomocą metod, takich String.LastIndexOf jak String.StartsWithlub, lub Regex użyć wyrażeń regularnych i klasy do wyszukiwania wzorców.You can search the string by using methods such as String.LastIndexOf or String.StartsWith, or you can use regular expressions and the Regex class to search for patterns. Ponieważ oba StringBuilder obiekty String i są używane w kodowaniu UTF-16 do przechowywania znaków, pozycje indeksu znaków, podciągów i wyrażenia regularne są takie same w obu obiektach.Because both StringBuilder and String objects use UTF-16 encoding to store characters, the index positions of characters, substrings, and regular expression matches are the same in both objects. Dzięki temu można użyć StringBuilder metod, aby wprowadzić zmiany w tym samym miejscu, w którym tekst zostanie znaleziony String w obiekcie.This enables you to use StringBuilder methods to make changes at the same position at which that text is found in the String object.

    Uwaga

    W przypadku zastosowania tego podejścia należy wykonać od końca StringBuilder obiektu do jego początku, aby nie trzeba wielokrotnie StringBuilder skonwertować obiekt na ciąg.If you adopt this approach, you should work from the end of the StringBuilder object to its beginning so that you don't have to repeatedly convert the StringBuilder object to a string.

    To podejście pokazano w poniższym przykładzie.The following example illustrates this approach. Przechowuje cztery wystąpienia każdej litery alfabetu angielskiego w StringBuilder obiekcie.It stores four occurrences of each letter of the English alphabet in a StringBuilder object. Następnie konwertuje tekst do String obiektu i używa wyrażenia regularnego do identyfikowania pozycji początkowej każdej sekwencji zawierającej cztery znaki.It then converts the text to a String object and uses a regular expression to identify the starting position of each four-character sequence. Na koniec dodaje znak podkreślenia przed każdą sekwencją czterech znaków z wyjątkiem pierwszej sekwencji i konwertuje pierwszy znak sekwencji na wielkie litery.Finally, it adds an underscore before each four-character sequence except for the first sequence, and converts the first character of the sequence to uppercase.

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort)'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
          
          // Create a parallel string object.
          String sbString = sb.ToString();
          // Determine where each new character sequence begins.
          String pattern = @"(\w)\1+";
          MatchCollection matches = Regex.Matches(sbString, pattern);
    
          // Uppercase the first occurrence of the sequence, and separate it
          // from the previous sequence by an underscore character.
          for (int ctr = matches.Count - 1; ctr >= 0; ctr--) { 
             Match m = matches[ctr];
             sb[m.Index] = Char.ToUpper(sb[m.Index]);
             if (m.Index > 0) sb.Insert(m.Index, "_");
          }
          // Display the resulting string.
          sbString = sb.ToString();
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Create a parallel string object.
          Dim sbString As String = sb.ToString()
          ' Determine where each new character sequence begins.
          Dim pattern As String = "(\w)\1+"
          Dim matches As MatchCollection = Regex.Matches(sbString, pattern)
    
          ' Uppercase the first occurrence of the sequence, and separate it
          ' from the previous sequence by an underscore character.
          For ctr As Integer = matches.Count - 1 To 0 Step -1 
             Dim m As Match = matches(ctr)
             sb.Chars(m.Index) = Char.ToUpper(sb.Chars(m.index))
             If m.Index > 0 Then sb.Insert(m.Index, "_")
          Next
          ' Display the resulting string.
          sbString = sb.ToString()
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' The example displays the following output:
    '    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    '    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
  • Użyj właściwości do sekwencyjnego przeszukiwania zakresu znaków StringBuilder w obiekcie. StringBuilder.Chars[Int32]Use the StringBuilder.Chars[Int32] property to sequentially search a range of characters in a StringBuilder object. Takie podejście może nie być praktyczne, jeśli liczba znaków do przeszukania jest duża lub logika wyszukiwania jest szczególnie złożona.This approach may not be practical if the number of characters to be searched is large or the search logic is particularly complex. Aby uzyskać wpływ na wydajność dla bardzo dużych, StringBuilder rozbudowanych obiektów, należy zapoznać się z dokumentacją StringBuilder.Chars[Int32] właściwości.For the performance implications of character-by-character index-based access for very large, chunked StringBuilder objects, see the documentation for the StringBuilder.Chars[Int32] property.

    Poniższy przykład jest identyczny w funkcji w poprzednim przykładzie, ale różni się w implementacji.The following example is identical in functionality to the previous example but differs in implementation. Używa Chars[Int32] właściwości, aby wykryć, kiedy wartość znaku została zmieniona, wstawia podkreślenie w tym miejscu i konwertuje pierwszy znak w nowej sekwencji na wielkie litery.It uses the Chars[Int32] property to detect when a character value has changed, inserts an underscore at that position, and converts the first character in the new sequence to uppercase.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort) 'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
    
          // Iterate the text to determine when a new character sequence occurs.
          int position = 0;
          Char current = '\u0000';
          do {
             if (sb[position] != current) {
                current = sb[position];
                sb[position] = Char.ToUpper(sb[position]);
                if (position > 0) 
                   sb.Insert(position, "_");
                position += 2;
             }
             else {
                position++;
             }      
          } while (position <= sb.Length - 1);
          // Display the resulting string.
          String sbString = sb.ToString();
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Iterate the text to determine when a new character sequence occurs.
          Dim position As Integer = 0
          Dim current As Char = ChrW(0)
          Do
             If sb(position) <> current Then
                current = sb(position)
                sb(position) = Char.ToUpper(sb(position))
                If position > 0 Then sb.Insert(position, "_")
                position += 2
             Else
                position += 1
             End If      
          Loop While position <= sb.Length - 1
          ' Display the resulting string.
          Dim sbString As String = sb.ToString()
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' The example displays the following output:
    '    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    '    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
  • Przechowuj cały StringBuilder niezmodyfikowany tekst w obiekcie, StringBuilder.ToString Wywołaj metodę, aby String przekonwertować StringBuilder obiekt na obiekt, i przeprowadź modyfikacje String obiektu.Store all the unmodified text in the StringBuilder object, call the StringBuilder.ToString method to convert the StringBuilder object to a String object, and perform the modifications on the String object. Możesz użyć tej metody, jeśli masz tylko kilka modyfikacji: w przeciwnym razie koszt pracy z niezmiennymi ciągami może Negate korzyści wynikające z użycia StringBuilder obiektu.You can use this approach if you have only a few modifications; otherwise, the cost of working with immutable strings may negate the performance benefits of using a StringBuilder object.

    Poniższy przykład jest identyczny w funkcji z poprzednimi dwoma przykładami, ale różni się w implementacji.The following example is identical in functionality to the previous two examples but differs in implementation. Tworzy StringBuilder obiekt, konwertuje go String na obiekt, a następnie używa wyrażenia regularnego do wykonywania wszystkich pozostałych modyfikacji ciągu.It creates a StringBuilder object, converts it to a String object, and then uses a regular expression to perform all remaining modifications on the string. Regex.Replace(String, String, MatchEvaluator) Metoda używa wyrażenia lambda do przeprowadzenia zamiany dla każdego dopasowania.The Regex.Replace(String, String, MatchEvaluator) method uses a lambda expression to perform the replacement on each match.

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort)'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
         
          // Convert it to a string.
          String sbString = sb.ToString();
    
          // Use a regex to uppercase the first occurrence of the sequence, 
          // and separate it from the previous sequence by an underscore.
          string pattern = @"(\w)(\1+)";
          sbString = Regex.Replace(sbString, pattern, 
                                   m => (m.Index > 0 ? "_" : "") + 
                                   m.Groups[1].Value.ToUpper() + 
                                   m.Groups[2].Value);
    
          // Display the resulting string.
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Convert it to a string.
          Dim sbString As String = sb.ToString()
    
          ' Use a regex to uppercase the first occurrence of the sequence, 
          ' and separate it from the previous sequence by an underscore.
          Dim pattern As String = "(\w)(\1+)"
          sbString = Regex.Replace(sbString, pattern, 
                                   Function(m) If(m.Index > 0,"_","") + 
                                               m.Groups(1).Value.ToUpper + 
                                               m.Groups(2).Value)
    
          ' Display the resulting string.
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' The example displays the following output:
    '    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    '    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    

Konwersja obiektu StringBuilder na ciągConverting the StringBuilder object to a string

Przed przekazaniem StringBuilder ciągu reprezentowanego String przez StringBuilder obiekt do metody, która ma String parametr lub wyświetlenie go w interfejsie użytkownika, należy przekonwertować obiekt na obiekt.You must convert the StringBuilder object to a String object before you can pass the string represented by the StringBuilder object to a method that has a String parameter or display it in the user interface. Tę konwersję wykonuje się StringBuilder.ToString , wywołując metodę.You perform this conversion by calling the StringBuilder.ToString method. Aby zapoznać się z ilustracją, zobacz poprzedni przykład, który ToString wywołuje metodę, aby StringBuilder przekonwertować obiekt na ciąg, tak aby można go było przesłać do metody wyrażenia regularnego.For an illustration, see the previous example, which calls the ToString method to convert a StringBuilder object to a string so that it can be passed to a regular expression method.

Uwagi dotyczące wywoływania

W programie .NET Core i w .NET Framework 4,0 i nowszych wersjach, StringBuilder gdy tworzysz wystąpienie obiektu przez StringBuilder(Int32, Int32) wywołanie konstruktora, długość StringBuilder i pojemność wystąpienia może wzrosnąć poza wartość jej MaxCapacity wartość.In .NET Core and in the .NET Framework 4.0 and later versions, when you instantiate the StringBuilder object by calling the StringBuilder(Int32, Int32) constructor, both the length and the capacity of the StringBuilder instance can grow beyond the value of its MaxCapacity property. Może się to zdarzyć w szczególności w Append(String) przypadku wywołania metod i AppendFormat(String, Object) dołączenia małych ciągów.This can occur particularly when you call the Append(String) and AppendFormat(String, Object) methods to append small strings.

Konstruktory

StringBuilder() StringBuilder() StringBuilder() StringBuilder()

Inicjuje nowe wystąpienie klasy StringBuilder klasy.Initializes a new instance of the StringBuilder class.

StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32)

Inicjuje nowe wystąpienie StringBuilder klasy przy użyciu określonej pojemności.Initializes a new instance of the StringBuilder class using the specified capacity.

StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32)

Inicjuje nowe wystąpienie StringBuilder klasy, która rozpoczyna się od określonej pojemności i może zostać powiększone do określonej wartości maksymalnej.Initializes a new instance of the StringBuilder class that starts with a specified capacity and can grow to a specified maximum.

StringBuilder(String) StringBuilder(String) StringBuilder(String) StringBuilder(String)

Inicjuje nowe wystąpienie StringBuilder klasy przy użyciu określonego ciągu.Initializes a new instance of the StringBuilder class using the specified string.

StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32)

Inicjuje nowe wystąpienie StringBuilder klasy przy użyciu określonego ciągu i pojemności.Initializes a new instance of the StringBuilder class using the specified string and capacity.

StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32)

Inicjuje nowe wystąpienie StringBuilder klasy z określonego podciągu i pojemności.Initializes a new instance of the StringBuilder class from the specified substring and capacity.

Właściwości

Capacity Capacity Capacity Capacity

Pobiera lub ustawia maksymalną liczbę znaków, które mogą być zawarte w pamięci przydzielonej przez bieżące wystąpienie.Gets or sets the maximum number of characters that can be contained in the memory allocated by the current instance.

Chars[Int32] Chars[Int32] Chars[Int32] Chars[Int32]

Pobiera lub ustawia znak w podanej pozycji znaku w tym wystąpieniu.Gets or sets the character at the specified character position in this instance.

Length Length Length Length

Pobiera lub ustawia długość bieżącego StringBuilder obiektu.Gets or sets the length of the current StringBuilder object.

MaxCapacity MaxCapacity MaxCapacity MaxCapacity

Pobiera maksymalną pojemność tego wystąpienia.Gets the maximum capacity of this instance.

Metody

Append(Boolean) Append(Boolean) Append(Boolean) Append(Boolean)

Dołącza ciąg reprezentujący określoną wartość logiczną do tego wystąpienia.Appends the string representation of a specified Boolean value to this instance.

Append(Byte) Append(Byte) Append(Byte) Append(Byte)

Dołącza ciąg reprezentujący określoną 8-bitową liczbę całkowitą bez znaku do tego wystąpienia.Appends the string representation of a specified 8-bit unsigned integer to this instance.

Append(Char) Append(Char) Append(Char) Append(Char)

Dołącza ciąg reprezentujący określony Char obiekt do tego wystąpienia.Appends the string representation of a specified Char object to this instance.

Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32)

Dołącza tablicę znaków Unicode, zaczynając od określonego adresu do tego wystąpienia.Appends an array of Unicode characters starting at a specified address to this instance.

Append(Char, Int32) Append(Char, Int32) Append(Char, Int32) Append(Char, Int32)

Dołącza określoną liczbę kopii ciągu reprezentującego znak Unicode do tego wystąpienia.Appends a specified number of copies of the string representation of a Unicode character to this instance.

Append(Char[]) Append(Char[]) Append(Char[]) Append(Char[])

Dołącza ciąg reprezentujący znaki Unicode w określonej tablicy do tego wystąpienia.Appends the string representation of the Unicode characters in a specified array to this instance.

Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32)

Dołącza ciąg reprezentujący określoną podtablicę znaków Unicode do tego wystąpienia.Appends the string representation of a specified subarray of Unicode characters to this instance.

Append(Decimal) Append(Decimal) Append(Decimal) Append(Decimal)

Dołącza ciąg reprezentujący określoną liczbę dziesiętną do tego wystąpienia.Appends the string representation of a specified decimal number to this instance.

Append(Double) Append(Double) Append(Double) Append(Double)

Dołącza ciąg reprezentujący określoną liczbę zmiennoprzecinkową o podwójnej precyzji do tego wystąpienia.Appends the string representation of a specified double-precision floating-point number to this instance.

Append(Int16) Append(Int16) Append(Int16) Append(Int16)

Dołącza ciąg reprezentujący określoną 16-bitową liczbę całkowitą ze znakiem do tego wystąpienia.Appends the string representation of a specified 16-bit signed integer to this instance.

Append(Int32) Append(Int32) Append(Int32) Append(Int32)

Dołącza ciąg reprezentujący określoną 32-bitową liczbę całkowitą ze znakiem do tego wystąpienia.Appends the string representation of a specified 32-bit signed integer to this instance.

Append(Int64) Append(Int64) Append(Int64) Append(Int64)

Dołącza ciąg reprezentujący określoną 64-bitową liczbę całkowitą ze znakiem do tego wystąpienia.Appends the string representation of a specified 64-bit signed integer to this instance.

Append(Object) Append(Object) Append(Object) Append(Object)

Dołącza ciąg reprezentujący określony obiekt do tego wystąpienia.Appends the string representation of a specified object to this instance.

Append(ReadOnlyMemory<Char>) Append(ReadOnlyMemory<Char>) Append(ReadOnlyMemory<Char>) Append(ReadOnlyMemory<Char>)

Dołącza ciąg reprezentujący określony region pamięci tylko do odczytu do tego wystąpienia.Appends the string representation of a specified read-only character memory region to this instance.

Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>)

Dołącza ciąg reprezentujący określony zakres znaków tylko do odczytu do tego wystąpienia.Appends the string representation of a specified read-only character span to this instance.

Append(SByte) Append(SByte) Append(SByte) Append(SByte)

Dołącza ciąg reprezentujący określoną 8-bitową liczbę całkowitą ze znakiem do tego wystąpienia.Appends the string representation of a specified 8-bit signed integer to this instance.

Append(Single) Append(Single) Append(Single) Append(Single)

Dołącza ciąg reprezentujący określoną liczbę zmiennoprzecinkową o pojedynczej precyzji do tego wystąpienia.Appends the string representation of a specified single-precision floating-point number to this instance.

Append(String) Append(String) Append(String) Append(String)

Dołącza kopię określonego ciągu do tego wystąpienia.Appends a copy of the specified string to this instance.

Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32)

Dołącza kopię określonego podciągu do tego wystąpienia.Appends a copy of a specified substring to this instance.

Append(StringBuilder) Append(StringBuilder) Append(StringBuilder) Append(StringBuilder)

Dołącza ciąg reprezentujący określony Konstruktor ciągów do tego wystąpienia.Appends the string representation of a specified string builder to this instance.

Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32)

Dołącza kopię podciągu w określonym konstruktorze ciągów do tego wystąpienia.Appends a copy of a substring within a specified string builder to this instance.

Append(UInt16) Append(UInt16) Append(UInt16) Append(UInt16)

Dołącza ciąg reprezentujący określoną 16-bitową liczbę całkowitą bez znaku do tego wystąpienia.Appends the string representation of a specified 16-bit unsigned integer to this instance.

Append(UInt32) Append(UInt32) Append(UInt32) Append(UInt32)

Dołącza ciąg reprezentujący określoną 32-bitową liczbę całkowitą bez znaku do tego wystąpienia.Appends the string representation of a specified 32-bit unsigned integer to this instance.

Append(UInt64) Append(UInt64) Append(UInt64) Append(UInt64)

Dołącza ciąg reprezentujący określoną 64-bitową liczbę całkowitą bez znaku do tego wystąpienia.Appends the string representation of a specified 64-bit unsigned integer to this instance.

AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object)

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący pojedynczy argument przy użyciu określonego dostawcy formatu.Each format item is replaced by the string representation of a single argument using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object)

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący jeden z dwóch argumentów przy użyciu określonego dostawcy formatu.Each format item is replaced by the string representation of either of two arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object)

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący jeden z trzech argumentów przy użyciu określonego dostawcy formatu.Each format item is replaced by the string representation of either of three arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[])

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący odpowiadający argument w tablicy parametrów przy użyciu określonego dostawcy formatu.Each format item is replaced by the string representation of a corresponding argument in a parameter array using a specified format provider.

AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object)

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący pojedynczy argument.Each format item is replaced by the string representation of a single argument.

AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object)

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący jeden z dwóch argumentów.Each format item is replaced by the string representation of either of two arguments.

AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object)

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący jeden z trzech argumentów.Each format item is replaced by the string representation of either of three arguments.

AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[])

Dołącza ciąg zwracany przez przetwarzanie ciągu formatu złożonego, który zawiera zero lub więcej elementów formatu, do tego wystąpienia.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Każdy element formatu jest zamieniany na ciąg reprezentujący odpowiadający argument w tablicy parametrów.Each format item is replaced by the string representation of a corresponding argument in a parameter array.

AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[])
AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[])
AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[])
AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[])
AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>)
AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>)
AppendLine() AppendLine() AppendLine() AppendLine()

Dołącza domyślny terminator wiersza do końca bieżącego StringBuilder obiektu.Appends the default line terminator to the end of the current StringBuilder object.

AppendLine(String) AppendLine(String) AppendLine(String) AppendLine(String)

Dołącza kopię określonego ciągu, a następnie domyślny terminator linii do końca bieżącego StringBuilder obiektu.Appends a copy of the specified string followed by the default line terminator to the end of the current StringBuilder object.

Clear() Clear() Clear() Clear()

Usuwa wszystkie znaki z bieżącego StringBuilder wystąpienia.Removes all characters from the current StringBuilder instance.

CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32)

Kopiuje znaki z określonego segmentu tego wystąpienia do określonego segmentu tablicy docelowej Char .Copies the characters from a specified segment of this instance to a specified segment of a destination Char array.

CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32)
EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32)

Zapewnia, że pojemność tego wystąpienia StringBuilder jest równa co najmniej określonej wartości.Ensures that the capacity of this instance of StringBuilder is at least the specified value.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.Determines whether the specified object is equal to the current object.

(Inherited from Object)
Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>)

Zwraca wartość wskazującą, czy znaki w tym wystąpieniu są równe znakom w określonym zakresie znaków tylko do odczytu.Returns a value indicating whether the characters in this instance are equal to the characters in a specified read-only character span.

Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.Returns a value indicating whether this instance is equal to a specified object.

GetChunks() GetChunks() GetChunks() GetChunks()

Zwraca obiekt, który może służyć do iteracji przez fragmenty znaków reprezentowane w ReadOnlyMemory<Char> utworzonym z tego StringBuilder wystąpienia.Returns an object that can be used to iterate through the chunks of characters represented in a ReadOnlyMemory<Char> created from this StringBuilder instance.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Type Pobiera bieżące wystąpienie.Gets the Type of the current instance.

(Inherited from Object)
Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean)

Wstawia ciąg reprezentujący wartość logiczną do tego wystąpienia w podanej pozycji znaku.Inserts the string representation of a Boolean value into this instance at the specified character position.

Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte)

Wstawia ciąg reprezentujący określoną 8-bitową liczbę całkowitą bez znaku w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a specified 8-bit unsigned integer into this instance at the specified character position.

Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char)

Wstawia ciąg reprezentujący określony znak Unicode do tego wystąpienia w podanej pozycji znaku.Inserts the string representation of a specified Unicode character into this instance at the specified character position.

Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[])

Wstawia ciąg reprezentujący określoną tablicę znaków Unicode w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a specified array of Unicode characters into this instance at the specified character position.

Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32)

Wstawia ciąg reprezentujący określoną podtablicę znaków Unicode do tego wystąpienia w podanej pozycji znaku.Inserts the string representation of a specified subarray of Unicode characters into this instance at the specified character position.

Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal)

Wstawia ciąg reprezentujący liczbę dziesiętną do tego wystąpienia w podanej pozycji znaku.Inserts the string representation of a decimal number into this instance at the specified character position.

Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double)

Wstawia ciąg reprezentujący liczbę zmiennoprzecinkową o podwójnej precyzji w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a double-precision floating-point number into this instance at the specified character position.

Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16)

Wstawia ciąg reprezentujący określoną 16-bitową liczbę całkowitą ze znakiem w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a specified 16-bit signed integer into this instance at the specified character position.

Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32)

Wstawia ciąg reprezentujący określony 32-bitową liczbę całkowitą ze znakiem w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a specified 32-bit signed integer into this instance at the specified character position.

Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64)

Wstawia ciąg reprezentujący 64-bitową liczbę całkowitą ze znakiem w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a 64-bit signed integer into this instance at the specified character position.

Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object)

Wstawia ciąg reprezentujący obiekt w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of an object into this instance at the specified character position.

Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>)
Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte)

Wstawia ciąg reprezentujący określoną 8-bitową liczbę całkowitą ze znakiem w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a specified 8-bit signed integer into this instance at the specified character position.

Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single)

Wstawia ciąg reprezentujący liczbę zmiennoprzecinkową o pojedynczej precyzji do tego wystąpienia w podanej pozycji znaku.Inserts the string representation of a single-precision floating point number into this instance at the specified character position.

Insert(Int32, String) Insert(Int32, String) Insert(Int32, String) Insert(Int32, String)

Wstawia ciąg do tego wystąpienia w podanej pozycji znaku.Inserts a string into this instance at the specified character position.

Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32)

Wstawia co najmniej jedną kopię określonego ciągu do tego wystąpienia w podanej pozycji znaku.Inserts one or more copies of a specified string into this instance at the specified character position.

Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16)

Wstawia ciąg reprezentujący 16-bitową liczbę całkowitą bez znaku w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a 16-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32)

Wstawia ciąg reprezentujący 32-bitową liczbę całkowitą bez znaku w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a 32-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64)

Wstawia ciąg reprezentujący 64-bitową liczbę całkowitą bez znaku w tym wystąpieniu w podanej pozycji znaku.Inserts the string representation of a 64-bit unsigned integer into this instance at the specified character position.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Tworzy skróconą kopię bieżącego Objectelementu.Creates a shallow copy of the current Object.

(Inherited from Object)
Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32)

Usuwa określony zakres znaków z tego wystąpienia.Removes the specified range of characters from this instance.

Replace(Char, Char) Replace(Char, Char) Replace(Char, Char) Replace(Char, Char)

Zastępuje wszystkie wystąpienia określonego znaku w tym wystąpieniu innym określonym znakiem.Replaces all occurrences of a specified character in this instance with another specified character.

Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32)

Zastępuje, w ramach podciągu tego wystąpienia, wszystkie wystąpienia określonego znaku z innym określonym znakiem.Replaces, within a substring of this instance, all occurrences of a specified character with another specified character.

Replace(String, String) Replace(String, String) Replace(String, String) Replace(String, String)

Zastępuje wszystkie wystąpienia określonego ciągu w tym wystąpieniu innym określonym ciągiem.Replaces all occurrences of a specified string in this instance with another specified string.

Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32)

Zastępuje, w ramach podciągu tego wystąpienia, wszystkie wystąpienia określonego ciągu z innym określonym ciągiem.Replaces, within a substring of this instance, all occurrences of a specified string with another specified string.

ToString() ToString() ToString() ToString()

Konwertuje wartość tego wystąpienia na String.Converts the value of this instance to a String.

ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32)

Konwertuje wartość podciągu tego wystąpienia na String.Converts the value of a substring of this instance to a String.

Jawne implementacje interfejsu

ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Wypełnia obiekt danymi niezbędnymi do deserializacji bieżącego StringBuilder obiektu. SerializationInfoPopulates a SerializationInfo object with the data necessary to deserialize the current StringBuilder object.

Dotyczy

Zobacz też