StringBuilder StringBuilder StringBuilder StringBuilder Class

Определение

Предоставляет изменяемую строку символов.Represents a mutable string of characters. Этот класс не наследуется.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
Наследование
StringBuilderStringBuilderStringBuilderStringBuilder
Атрибуты
Реализации

Примеры

В следующем примере показано, как вызвать множество методов, определенных StringBuilder классом.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

Комментарии

Этот класс представляет объект, подобный строке, значение которого является изменяемой последовательностью символов.This class represents a string-like object whose value is a mutable sequence of characters.

СодержаниеIn this section:

Типы String и StringBuilderThe String and StringBuilder types

Хотя StringBuilder иString оба представляют последовательности символов, они реализуются по-разному.Although StringBuilder and String both represent sequences of characters, they are implemented differently. Stringявляется неизменяемым типом.String is an immutable type. То есть каждая операция, которая, в своюмся String , изменяет объект, на самом деле создает новую строку.That is, each operation that appears to modify a String object actually creates a new string.

Например, вызов String.Concat метода в следующем примере приводит C# к изменению значения строковой переменной с именем 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. Фактически Concat метод value возвращает объект с другим значением и адресом из объекта, переданного в метод. valueIn 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. Обратите внимание, что пример должен быть скомпилирован /unsafe с параметром компилятора.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

Для подпрограмм, выполняющих обширную обработку строк (например, приложения, которые изменяют строку несколько раз в цикле), многократное изменение строки может привести к значительному снижению производительности.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. Альтернативой является использование StringBuilder, которое является изменяемым строковым классом.The alternative is to use StringBuilder, which is a mutable string class. Изменяемость означает, что после создания экземпляра класса его можно изменить путем добавления, удаления, замены или вставки символов.Mutability means that once an instance of the class has been created, it can be modified by appending, removing, replacing, or inserting characters. StringBuilder Объект поддерживает буфер для размещения расширения в строке.A StringBuilder object maintains a buffer to accommodate expansions to the string. При наличии свободного места новые данные добавляются в буфер. в противном случае выделяется новый буфер большего размера, данные из исходного буфера копируются в новый буфер, а новые данные добавляются в новый буфер.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.

Важно!

Хотя класс обычно обеспечивает лучшую производительность, String чем класс, не следует автоматически заменять String на StringBuilder , когда требуется управлять строками. 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. Производительность зависит от размера строки, объема памяти, выделяемого для новой строки, системы, в которой выполняется приложение, и типа операции.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. Вы должны быть готовы к тестированию приложения, чтобы определить StringBuilder , предлагает ли он значительное повышение производительности.You should be prepared to test your app to determine whether StringBuilder actually offers a significant performance improvement.

Рассмотрите возможность String использования класса в следующих условиях:Consider using the String class under these conditions:

  • Когда число изменений, которое приложение будет вносить в строку, невелико.When the number of changes that your app will make to a string is small. В таких случаях StringBuilder может предложить незначительное Stringповышение производительности.In these cases, StringBuilder might offer negligible or no performance improvement over String.

  • При выполнении фиксированного числа операций объединения, особенно с строковыми литералами.When you are performing a fixed number of concatenation operations, particularly with string literals. В этом случае компилятор может объединить операции объединения в одну операцию.In this case, the compiler might combine the concatenation operations into a single operation.

  • Если при построении строки необходимо выполнять широкие операции поиска.When you have to perform extensive search operations while you are building your string. В StringBuilder классе отсутствуют методы поиска, такие как IndexOf или StartsWith.The StringBuilder class lacks search methods such as IndexOf or StartsWith. Необходимо преобразовать StringBuilder объект String в для этих операций, и это может отрицательно повлиять на производительность при использовании 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. Дополнительные сведения см. в разделе Поиск текста в объекте StringBuilder .For more information, see the Searching the text in a StringBuilder object section.

Рассмотрите возможность StringBuilder использования класса в следующих условиях:Consider using the StringBuilder class under these conditions:

  • Если вы ожидаете, что приложение будет вносить неизвестное количество изменений в строку во время разработки (например, при использовании цикла для сцепления случайного числа строк, содержащего введенные пользователем данные).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).

  • Если предполагается, что приложение вносит значительное количество изменений в строку.When you expect your app to make a significant number of changes to a string.

Принцип работы StringBuilderHow StringBuilder works

Свойство указывает количество символов, которое в StringBuilder данный момент содержит объект. StringBuilder.LengthThe StringBuilder.Length property indicates the number of characters the StringBuilder object currently contains. При добавлении символов к StringBuilder объекту его длина увеличивается до тех пор, пока не будет равен размеру StringBuilder.Capacity свойства, определяющему количество символов, которое может содержать объект.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. Если число добавленных символов приводит к превышению размера StringBuilder объекта до его текущей емкости, выделяется новая память, значение Capacity свойства удваивается, в StringBuilder объект добавляются новые символы и его свойство Lengthсвойство регулируется.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. Дополнительная память для StringBuilder объекта выделяется динамически до тех пор, пока не достигнет значения, StringBuilder.MaxCapacity определенного свойством.Additional memory for the StringBuilder object is allocated dynamically until it reaches the value defined by the StringBuilder.MaxCapacity property. По достижении максимальной емкости для StringBuilder объекта не может быть выделена память, и при попытке добавить символы или расширить ее после максимальной емкости будет создано ArgumentOutOfRangeException OutOfMemoryException исключение или.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.

В следующем примере показано, как StringBuilder объект выделяет новую память и увеличивает ее емкость динамически по мере расширения строки, назначенной объекту.The following example illustrates how a StringBuilder object allocates new memory and increases its capacity dynamically as the string assigned to the object expands. Код создает StringBuilder объект, вызывая его конструктор по умолчанию (без параметров).The code creates a StringBuilder object by calling its default (parameterless) constructor. Емкость этого объекта по умолчанию составляет 16 символов, а ее максимальная емкость превышает 2 000 000 000 символов.The default capacity of this object is 16 characters, and its maximum capacity is more than 2 billion characters. Добавление строки «это предложение».Appending the string "This is a sentence." приводит к новому выделению памяти, так как длина строки (19 символов) превышает емкость StringBuilder объекта по умолчанию.results in a new memory allocation because the string length (19 characters) exceeds the default capacity of the StringBuilder object. Емкость объекта удваивается до 32 символов, добавляется новая строка, а длина объекта теперь равна 19 символам.The capacity of the object doubles to 32 characters, the new string is added, and the length of the object now equals 19 characters. Затем код добавляет строку «это дополнительное предложение».The code then appends the string "This is an additional sentence." к значению StringBuilder объекта 11 раз.to the value of the StringBuilder object 11 times. Когда операция добавления приводит StringBuilder к превышению емкости объекта, ее существующая емкость удваивается Append и операция завершается с ошибкой.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

Выделение памятиMemory allocation

Емкость StringBuilder объекта по умолчанию составляет 16 символов, а максимальная емкость по умолчанию — Int32.MaxValue.The default capacity of a StringBuilder object is 16 characters, and its default maximum capacity is Int32.MaxValue. Эти значения по умолчанию используются при вызове StringBuilder() конструкторов и StringBuilder(String) .These default values are used if you call the StringBuilder() and StringBuilder(String) constructors.

Можно явно определить начальную емкость StringBuilder объекта следующими способами.You can explicitly define the initial capacity of a StringBuilder object in the following ways:

  • Путем вызова любого из StringBuilder конструкторов, capacity включающих параметр, при создании объекта.By calling any of the StringBuilder constructors that includes a capacity parameter when you create the object.

  • Путем явного присвоения StringBuilder.Capacity свойству нового значения для расширения существующего StringBuilder объекта.By explicitly assigning a new value to the StringBuilder.Capacity property to expand an existing StringBuilder object. Обратите внимание, что свойство создает исключение, если новая емкость меньше, чем существующая емкость, или больше StringBuilder , чем максимальная емкость объекта.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.

  • Путем вызова StringBuilder.EnsureCapacity метода с новой емкостью.By calling the StringBuilder.EnsureCapacity method with the new capacity. Новая емкость не StringBuilder должна превышать максимальную емкость объекта.The new capacity must not be greater than the StringBuilder object's maximum capacity. Однако, в отличие от присваивания Capacity свойству, EnsureCapacity не создает исключение, если нужная Новая емкость меньше, чем существующая емкость. в данном случае вызов метода не оказывает никакого влияния.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.

Если длина строки StringBuilder Capacity , назначенной объекту в вызове конструктора, превышает емкость по умолчанию или указанную емкость, свойству присваивается длина строки, заданной value параметром.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.

Можно явно определить максимальную емкость StringBuilder объекта, StringBuilder(Int32, Int32) вызвав конструктор.You can explicitly define the maximum capacity of a StringBuilder object by calling the StringBuilder(Int32, Int32) constructor. Вы не можете изменить максимальную емкость, назначив MaxCapacity свойству новое значение, так как оно доступно только для чтения.You can't change the maximum capacity by assigning a new value to the MaxCapacity property, because it is read-only.

Как показано в предыдущем разделе, если существующая емкость недостаточна, выделяется дополнительная память, а емкость StringBuilder объекта удваивается до значения, определенного MaxCapacity свойством.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.

Как правило, емкость по умолчанию и максимальная емкость подходят для большинства приложений.In general, the default capacity and maximum capacity are adequate for most apps. Эти значения можно установить при следующих условиях.You might consider setting these values under the following conditions:

  • Если в конечном итоге размер StringBuilder объекта, вероятно, увеличится слишком большим, обычно он превышает несколько мегабайт.If the eventual size of the StringBuilder object is likely to grow exceedingly large, typically in excess of several megabytes. В этом случае может возникнуть некоторый выигрыш в производительности от установки начального Capacity свойства к значительному высокому значению, чтобы исключить необходимость в слишком большом количестве перераспределений памяти.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.

  • Если приложение работает в системе с ограниченным объемом памяти.If your app is running on a system with limited memory. В этом случае может потребоваться установить MaxCapacity значение свойства меньше, чем Int32.MaxValue , если приложение обрабатывает большие строки, которые могут привести к его выполнению в среде с ограниченным объемом памяти.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.

Создание экземпляра объекта StringBuilderInstantiating a StringBuilder object

Экземпляр StringBuilder объекта создается путем вызова одного из шести перегруженных конструкторов классов, которые перечислены в следующей таблице.You instantiate a StringBuilder object by calling one of its six overloaded class constructors, which are listed in the following table. Три конструктора создают экземпляр StringBuilder объекта, значение которого является пустой строкой, но Capacity устанавливает значения и MaxCapacity по-разному.Three of the constructors instantiate a StringBuilder object whose value is an empty string, but set its Capacity and MaxCapacity values differently. Остальные три конструктора определяют StringBuilder объект с определенным строковым значением и емкостью.The remaining three constructors define a StringBuilder object that has a specific string value and capacity. Два из трех конструкторов используют максимальную емкость Int32.MaxValueпо умолчанию, а третья позволяет задать максимальную емкость.Two of the three constructors use the default maximum capacity of Int32.MaxValue, whereas the third allows you to set the maximum capacity.

КонструкторConstructor Строковое значениеString value ЕмкостьCapacity Максимальная емкостьMaximum capacity
StringBuilder() String.Empty 1616 Int32.MaxValue
StringBuilder(Int32) String.Empty capacity Определяется параметромDefined by the capacity parameter Int32.MaxValue
StringBuilder(Int32, Int32) String.Empty capacity Определяется параметромDefined by the capacity parameter maxCapacity Определяется параметромDefined by the maxCapacity parameter
StringBuilder(String) value Определяется параметромDefined by the value parameter 16 или value.16 or value. Length, в зависимости от того, какое значение большеLength, whichever is greater Int32.MaxValue
StringBuilder(String, Int32) value Определяется параметромDefined by the value parameter Определяется параметром или value. capacityDefined by the capacity parameter or value. Length, в зависимости от того, какое значение больше.Length, whichever is greater. Int32.MaxValue
StringBuilder(String, Int32, Int32, Int32) Определяется в value.Defined by value. Substring(startIndex, length)Substring(startIndex, length) Определяется параметром или value. capacityDefined by the capacity parameter or value. Length, в зависимости от того, какое значение больше.Length, whichever is greater. maxCapacity Определяется параметромDefined by the maxCapacity parameter

В следующем примере используются три из этих перегрузок конструктора для создания экземпляров StringBuilder объектов.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

Вызов методов StringBuilderCalling StringBuilder methods

Большинство методов, которые изменяют строку в StringBuilder экземпляре, возвращают ссылку на этот же экземпляр.Most of the methods that modify the string in a StringBuilder instance return a reference to that same instance. Это позволяет вызывать StringBuilder методы двумя способами:This enables you to call StringBuilder methods in two ways:

  • Можно выполнить отдельные вызовы метода и игнорировать возвращаемое значение, как показано в следующем примере.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.
    
  • В одной инструкции можно создать ряд вызовов методов.You can make a series of method calls in a single statement. Это может быть удобно, если вы хотите написать одну инструкцию, которая повязывает последовательные операции.This can be convenient if you want to write a single statement that chains successive operations. В следующем примере три вызова метода из предыдущего примера консолидируются в одну строку кода.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.
    

Выполнение операций StringBuilderPerforming StringBuilder operations

Методы StringBuilder класса можно использовать для итерации, добавления, удаления или изменения символов StringBuilder в объекте.You can use the methods of the StringBuilder class to iterate, add, delete, or modify characters in a StringBuilder object.

Итерация символов StringBuilderIterating StringBuilder characters

Доступ к символам в StringBuilder объекте можно получить StringBuilder.Chars[Int32] с помощью свойства.You can access the characters in a StringBuilder object by using the StringBuilder.Chars[Int32] property. В службах StringBuilder является индексатором; в Visual Basic это свойство класса по умолчанию. Chars[Int32] C#In C#, Chars[Int32] is an indexer; in Visual Basic, it is the default property of the StringBuilder class. Это позволяет задавать или извлекать отдельные символы, используя только индекс, без явной ссылки на Chars[Int32] свойство.This enables you to set or retrieve individual characters by using their index only, without explicitly referencing the Chars[Int32] property. Символы в StringBuilder объекте начинаются с индекса 0 (нуля) и продолжают индексироваться Length -1.Characters in a StringBuilder object begin at index 0 (zero) and continue to index Length - 1.

В следующем примере показано Chars[Int32] свойство.The following example illustrates the Chars[Int32] property. Он добавляет десять случайных чисел к StringBuilder объекту, а затем выполняет итерацию каждого символа.It appends ten random numbers to a StringBuilder object, and then iterates each character. Если категория символов в Юникоде равна UnicodeCategory.DecimalDigitNumber, она уменьшает число на 1 (или меняет число на 9, если его значение равно 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). В примере отображается содержимое StringBuilder объекта как до, так и после изменения значений отдельных символов.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

Индексирование на основе символов со свойством Chars[Int32] может работать очень медленно при следующих условиях:Using character-based indexing with the Chars[Int32] property can be extremely slow under the following conditions:

  • Экземпляр StringBuilder очень большой (например, состоит из нескольких десятков тысяч символов).The StringBuilder instance is large (for example, it consists of several tens of thousands of characters).
  • StringBuilder имеет блоки.The StringBuilder is "chunky." То есть повторные вызовы методов, например StringBuilder.Append, автоматически расширили свойство StringBuilder.Capacity объекта и выделили для него новые блоки памяти.That is, repeated calls to methods such as StringBuilder.Append have automatically expanded the object's StringBuilder.Capacity property and allocated new chunks of memory to it.

Это значительно влияет на производительность, поскольку при каждом доступе к символу проходится весь связанный список блоков с целью найти правильный буфер для индексации.Performance is severely impacted because each character access walks the entire linked list of chunks to find the correct buffer to index into.

Примечание

Даже когда большой объект StringBuilder с блоками использует свойство Chars[Int32] для доступа на основе индекса к одному символу или небольшому количеству символов, это оказывает незначительное влияние на производительность. Как правило, это операция 0(n) .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. Производительность серьезно снижается во время итерации символов в объекте StringBuilder — операция O(n^2) .The significant performance impact occurs when iterating the characters in the StringBuilder object, which is an O(n^2) operation.

Если возникают проблемы с производительностью при использовании символьного индексирования с объектами StringBuilder, попробуйте выполнить одно из следующих действий:If you encounter performance issues when using character-based indexing with StringBuilder objects, you can use any of the following workarounds:

  • Преобразуйте экземпляр StringBuilder в String путем вызова метода ToString, а затем получите доступ к символам в строке.Convert the StringBuilder instance to a String by calling the ToString method, then access the characters in the string.

  • Скопируйте содержимое существующего объекта StringBuilder в новый объект StringBuilder с заданным размером.Copy the contents of the existing StringBuilder object to a new pre-sized StringBuilder object. Производительность повышается, так как новый объект StringBuilder не содержит блоков.Performance improves because the new StringBuilder object is not chunky. Например: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)
    
  • Установите для начальной вместимости объекта StringBuilder значение, примерно равное максимальному ожидаемому размеру, путем вызова конструктора StringBuilder(Int32).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. Имейте в виду, что будет выделен целый блок памяти, даже если StringBuilder редко достигает своего максимального размера.Note that this allocates the entire block of memory even if the StringBuilder rarely reaches its maximum capacity.

Добавление текста в объект StringBuilderAdding text to a StringBuilder object

Класс включает следующие методы для развертывания содержимого StringBuilder объекта: StringBuilderThe StringBuilder class includes the following methods for expanding the contents of a StringBuilder object:

  • Метод добавляет строку, подстроку, массив символов, часть массива символов, один символ повторяется несколько раз или строковое представление примитивного типа данных StringBuilder в объект. 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.

  • Метод добавляет признак конца строки или строку вместе с признаком конца строки StringBuilder к объекту. AppendLineThe AppendLine method appends a line terminator or a string along with a line terminator to a StringBuilder object.

  • Метод добавляет строку составного формата в объект.StringBuilder AppendFormatThe AppendFormat method appends a composite format string to a StringBuilder object. Строковые представления объектов, входящих в результирующую строку, могут отражать соглашения о форматировании текущего языка и региональных параметров системы или указанного языка и региональных параметров.The string representations of objects included in the result string can reflect the formatting conventions of the current system culture or a specified culture.

  • Метод вставляет строку, подстроку, несколько повторений строки, массив символов, часть массива символов или строковое представление примитивного типа данных в указанной позиции StringBuilder в объекте. 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. Позиция определяется индексом, начинающимся с нуля.The position is defined by a zero-based index.

AppendВ следующем примере используются методы, AppendLine, AppendFormat Insertидля расширения текста объекта.StringBuilderThe 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            <

Удаление текста из объекта StringBuilderDeleting text from a StringBuilder object

Класс содержит методы, которые могут уменьшить размер текущего StringBuilder экземпляра. StringBuilderThe StringBuilder class includes methods that can reduce the size of the current StringBuilder instance. Метод удаляет все символы и Length устанавливает свойство в нуль. ClearThe Clear method removes all characters and sets the Length property to zero. Remove Метод удаляет указанное число символов, начиная с определенной позиции индекса.The Remove method deletes a specified number of characters starting at a particular index position. Кроме того, можно удалять символы из конца StringBuilder объекта, присвоив его Length свойству значение меньше длины текущего экземпляра.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.

В следующем примере удаляется часть текста из StringBuilder объекта, выводится его результирующая емкость, максимальная емкость и длина свойства длины, а затем Clear вызывается метод для удаления StringBuilder всех символов из объекта.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

Изменение текста в объекте StringBuilderModifying the text in a StringBuilder object

Метод заменяет все вхождения символа или строки во всем StringBuilder объекте или в определенном диапазоне символов. 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. В следующем примере используется Replace метод для замены всех восклицательных знаков (!) на вопросительные знаки (?) StringBuilder в объекте.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?

Поиск текста в объекте StringBuilderSearching the text in a StringBuilder object

String.Contains String.IndexOf String.StartsWith Класс не включает методы, аналогичные методам, и, предоставляемым String классом, которые позволяют искать в объекте определенный символ или подстроку. 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. Чтобы определить присутствие или начальную точку символа подстроки, необходимо выполнить поиск String значения, используя либо метод поиска строки, либо метод регулярного выражения.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. Существует четыре способа реализации таких поисков, как показано в следующей таблице.There are four ways to implement such searches, as the following table shows.

ПроцедураTechnique ИТ специалистовPros НедостаткиCons
Поиск значений строки перед их добавлением в StringBuilder объект.Search string values before adding them to the StringBuilder object. Полезно для определения того, существует ли подстрока.Useful for determining whether a substring exists. Не может использоваться, если позиция подстроки индекса важна.Cannot be used when the index position of a substring is important.
Вызовите ToString и найдите возвращенный String объект.Call ToString and search the returned String object. Простая в использовании, если вы назначите весь текст StringBuilder объекту, а затем приступите к его изменению.Easy to use if you assign all the text to a StringBuilder object, and then begin to modify it. Громоздкий способ повторного вызова ToString , если необходимо внести изменения до того, как весь текст будет добавлен StringBuilder в объект.Cumbersome to repeatedly call ToString if you must make modifications before all text is added to the StringBuilder object.

При внесении изменений следует приступать к работе с StringBuilder конца текста объекта.You must remember to work from the end of the StringBuilder object's text if you're making changes.
Chars[Int32] Используйте свойство для последовательного поиска диапазона символов.Use the Chars[Int32] property to sequentially search a range of characters. Полезно, если вы работаете с отдельными символами или небольшой подстрокой.Useful if you're concerned with individual characters or a small substring. Громоздкий, если количество символов для поиска велико или если логика поиска сложна.Cumbersome if the number of characters to search is large or if the search logic is complex.

Приводит к очень низкой производительности для объектов, которые увеличились очень крупнее с помощью повторяющихся вызовов методов.Results in very poor performance for objects that have grown very large through repeated method calls.
Преобразуйте String String объект в объект и выполните изменения объекта. StringBuilderConvert the StringBuilder object to a String object, and perform modifications on the String object. Полезно, если число изменений невелико.Useful if the number of modifications is small. Инвертирует преимущество StringBuilder производительности класса, если число изменений велико.Negates the performance benefit of the StringBuilder class if the number of modifications is large.

Рассмотрим эти приемы более подробно.Let's examine these techniques in greater detail.

  • Если целью поиска является определение того, существует ли конкретная подстрока (то есть если вы не заинтересованы в положении подстроки), можно искать строки перед их сохранением в StringBuilder объекте.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. В следующем примере показана одна возможная реализация.The following example provides one possible implementation. Он определяет StringBuilderFinder класс, конструктор которого передает ссылку StringBuilder на объект и подстроку для поиска в строке.It defines a StringBuilderFinder class whose constructor is passed a reference to a StringBuilder object and the substring to find in the string. В этом случае в примере предпринимается попытка определить, находится ли записанная температура в градусах Фаренгейта или Цельсия, и добавляет соответствующий вводный текст в StringBuilder начало объекта.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. Генератор случайных чисел используется для выбора массива, содержащего данные в градусах Цельсия или градусах Фаренгейта.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
    
  • Вызовите StringBuilder.ToString метод, чтобы StringBuilder преобразовать объект в String объект.Call the StringBuilder.ToString method to convert the StringBuilder object to a String object. Можно выполнять поиск в строке с помощью таких методов, String.LastIndexOf как String.StartsWithили, или Regex использовать регулярные выражения и класс для поиска шаблонов.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. Поскольку оба StringBuilder объекта String и используют кодировку UTF-16 для хранения символов, позиции индекса, подстроки и совпадения регулярных выражений одинаковы в обоих объектах.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. Это позволяет использовать StringBuilder методы для внесения изменений в той же позиции, в которой этот текст находится String в объекте.This enables you to use StringBuilder methods to make changes at the same position at which that text is found in the String object.

    Примечание

    При применении этого подхода следует работать с конца StringBuilder объекта до начала, чтобы не нужно было повторно StringBuilder преобразовывать объект в строку.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.

    Этот подход показан в приведенном ниже примере.The following example illustrates this approach. Он сохраняет четыре вхождения каждой буквы английского алфавита в StringBuilder объекте.It stores four occurrences of each letter of the English alphabet in a StringBuilder object. Затем он преобразует текст в String объект и использует регулярное выражение для обнаружения начальной позиции каждой последовательности из четырех символов.It then converts the text to a String object and uses a regular expression to identify the starting position of each four-character sequence. Наконец, он добавляет символ подчеркивания перед каждой последовательностью из четырех символов, за исключением первой последовательности, и преобразует первый символ последовательности в верхний регистр.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
    
  • Используйте свойство для последовательного поиска диапазона символов StringBuilder в объекте. StringBuilder.Chars[Int32]Use the StringBuilder.Chars[Int32] property to sequentially search a range of characters in a StringBuilder object. Этот подход может оказаться нецелесообразным, если количество символов для поиска является большим или логика поиска особенно сложна.This approach may not be practical if the number of characters to be searched is large or the search logic is particularly complex. Сведения о влиянии посимвольного доступа на индексы для очень больших фрагментированных StringBuilder объектов см. в документации StringBuilder.Chars[Int32] по свойству.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.

    Следующий пример аналогичен функции предыдущего примера, но отличается в реализации.The following example is identical in functionality to the previous example but differs in implementation. Он использует Chars[Int32] свойство для обнаружения изменения значения символа, вставляет символ подчеркивания в эту точку и преобразует первый символ в новой последовательности в верхний регистр.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
    
  • Сохраните весь StringBuilder неизмененный текст в объекте, StringBuilder.ToString вызовите метод, чтобы String преобразовать StringBuilder объект в объект и выполнить изменения String объекта.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. Этот подход можно использовать, если имеется всего несколько изменений. в противном случае стоимость работы с неизменяемыми строками может отрицательно отменять преимущества StringBuilder производительности при использовании объекта.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.

    Следующий пример аналогичен функциям предыдущих двух примеров, но отличается в реализации.The following example is identical in functionality to the previous two examples but differs in implementation. Он создает StringBuilder объект, преобразует его String в объект, а затем использует регулярное выражение для выполнения всех оставшихся изменений в строке.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) Метод использует лямбда-выражение для замены каждого соответствия.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
    

Преобразование объекта StringBuilder в строкуConverting the StringBuilder object to a string

Необходимо преобразовать объект StringBuilder в String, прежде чем передавать представленную объектом StringBuilder строку методу, который содержит параметр String, или вывести ее в пользовательском интерфейсе.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. Это преобразование выполняется путем вызова StringBuilder.ToString метода.You perform this conversion by calling the StringBuilder.ToString method. Иллюстрации см. в предыдущем примере, который вызывает ToString метод для StringBuilder преобразования объекта в строку, чтобы его можно было передать в метод регулярного выражения.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.

Примечания для тех, кто вызывает этот метод

В .NET Core и в .NET Framework 4,0 StringBuilder и более поздних версиях при создании экземпляра объекта путем StringBuilder(Int32, Int32) вызова конструктора длина StringBuilder и емкость экземпляра могут увеличиваться за пределами значения его свойств MaxCapacity свойства.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. Это может произойти в частности при вызове Append(String) методов AppendFormat(String, Object) и для добавления небольших строк.This can occur particularly when you call the Append(String) and AppendFormat(String, Object) methods to append small strings.

Конструкторы

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

Инициализирует новый экземпляр класса StringBuilder.Initializes a new instance of the StringBuilder class.

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

Инициализирует новый экземпляр класса StringBuilder, используя указанную емкость.Initializes a new instance of the StringBuilder class using the specified capacity.

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

Инициализирует новый экземпляр класса StringBuilder, который начинается с указанной емкости и может увеличиваться до указанного максимального значения.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)

Инициализирует новый экземпляр класса StringBuilder, используя указанную строку.Initializes a new instance of the StringBuilder class using the specified string.

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

Инициализирует новый экземпляр класса StringBuilder, используя указанную строку и емкость.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)

Инициализирует новый экземпляр класса StringBuilder из указанной подстроки и емкости.Initializes a new instance of the StringBuilder class from the specified substring and capacity.

Свойства

Capacity Capacity Capacity Capacity

Возвращает или задает максимальное число знаков, которое может содержаться в памяти, назначенной текущим экземпляром.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]

Возвращает или задает символ на указанной позиции в данном экземпляре.Gets or sets the character at the specified character position in this instance.

Length Length Length Length

Возвращает или задает длину текущего объекта StringBuilder.Gets or sets the length of the current StringBuilder object.

MaxCapacity MaxCapacity MaxCapacity MaxCapacity

Возвращает максимальную емкость данного экземпляра.Gets the maximum capacity of this instance.

Методы

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

Добавляет строковое представление указанного логического значения к данному экземпляру.Appends the string representation of a specified Boolean value to this instance.

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

Добавляет строковое представление указанного 8-разрядного целого числа без знака к данному экземпляру.Appends the string representation of a specified 8-bit unsigned integer to this instance.

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

Добавляет строковое представление указанного объекта Char в данный экземпляр.Appends the string representation of a specified Char object to this instance.

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

Добавляет к данному экземпляру массив символов Юникода начиная с указанного адреса.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)

Добавляет указанное число копий строкового представления символа Юникода к данному экземпляру.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[])

Добавляет строковое представление символа Юникода в указанном массиве к данному экземпляру.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)

Добавляет строковое представление указанного дочернего массива символов Юникода к данному экземпляру.Appends the string representation of a specified subarray of Unicode characters to this instance.

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

Добавляет строковое представление указанного десятичного числа к данному экземпляру.Appends the string representation of a specified decimal number to this instance.

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

Добавляет строковое представление указанного числа с плавающей запятой с удвоенной точностью к данному экземпляру.Appends the string representation of a specified double-precision floating-point number to this instance.

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

Добавляет строковое представление указанного 16-разрядного целого числа со знаком к данному экземпляру.Appends the string representation of a specified 16-bit signed integer to this instance.

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

Добавляет строковое представление указанного 32-разрядного целого числа со знаком к данному экземпляру.Appends the string representation of a specified 32-bit signed integer to this instance.

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

Добавляет строковое представление указанного 64-разрядного целого числа со знаком к данному экземпляру.Appends the string representation of a specified 64-bit signed integer to this instance.

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

Добавляет строковое представление указанного объекта к данному экземпляру.Appends the string representation of a specified object to this instance.

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

Добавляет строковое представление указанной области памяти символов только для чтения к данному экземпляру.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>)

Добавляет строковое представление указанного диапазона символов только для чтения к данному экземпляру.Appends the string representation of a specified read-only character span to this instance.

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

Добавляет строковое представление указанного 8-разрядного целого числа со знаком к данному экземпляру.Appends the string representation of a specified 8-bit signed integer to this instance.

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

Добавляет строковое представление указанного числа с плавающей запятой с обычной точностью к данному экземпляру.Appends the string representation of a specified single-precision floating-point number to this instance.

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

Добавляет копию указанной строки к данному экземпляру.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)

Добавляет копию указанной подстроки к данному экземпляру.Appends a copy of a specified substring to this instance.

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

Добавляет строковое представление указанного построителя строки к данному экземпляру.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)

Добавляет копию подстроки в пределах указанного построителя строки к данному экземпляру.Appends a copy of a substring within a specified string builder to this instance.

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

Добавляет строковое представление указанного 16-разрядного целого числа без знака к данному экземпляру.Appends the string representation of a specified 16-bit unsigned integer to this instance.

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

Добавляет строковое представление указанного 32-разрядного целого числа без знака к данному экземпляру.Appends the string representation of a specified 32-bit unsigned integer to this instance.

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

Добавляет строковое представление указанного 64-разрядного целого числа без знака к данному экземпляру.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)

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением одного аргумента с использованием указанного поставщика формата.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)

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением любого из двух аргументов с помощью указанного поставщика формата.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)

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением любого из трех аргументов с помощью указанного поставщика формата.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[])

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением соответствующего аргумента в массиве параметров с помощью указанного поставщика формата.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)

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением одного аргумента.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)

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением любого из двух аргументов.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)

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением любого из трех аргументов.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[])

Добавляет к данному экземпляру строку, возвращаемую в результате обработки строки составного формата, содержащей ноль или более элементов формата.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Каждый элемент формата заменяется строковым представлением соответствующего аргумента в массиве параметров.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()

Добавляет знак завершения строки по умолчанию в конец текущего объекта StringBuilder.Appends the default line terminator to the end of the current StringBuilder object.

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

Добавляет копию указанной строки и знак завершения строки по умолчанию в конец текущего объекта StringBuilder.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()

Удаляет все символы из текущего экземпляра StringBuilder.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)

Копирует символы из указанного сегмента этого экземпляра в указанный массив 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)

Гарантирует, что емкость данного экземпляра StringBuilder не меньше указанного значения.Ensures that the capacity of this instance of StringBuilder is at least the specified value.

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

Определяет, равен ли заданный объект текущему объекту.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>)

Возвращает значение, указывающее, соответствуют ли символы в этом экземпляре символам в указанном диапазоне символов, доступном только для чтения.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)

Возвращает значение, показывающее, равен ли данный экземпляр заданному объекту.Returns a value indicating whether this instance is equal to a specified object.

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

Возвращает объект, который можно использовать для прохода по фрагментам символов, представленных в ReadOnlyMemory<Char>, созданном из данного экземпляра StringBuilder.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()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

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

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

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

Вставляет строковое представление логического значения в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление указанного 8-разрядного целого числа без знака в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление указанного символа Юникода в данный экземпляр на указанную позицию символа.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[])

Вставляет строковое представление указанного массива символов Юникода в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление указанного подмассива символов Юникода в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление десятичного числа в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление числа с плавающей запятой с удвоенной точностью в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление указанного 16-разрядного знакового целого числа в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление указанного 32-разрядного знакового целого числа в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление 64-разрядного знакового целого числа в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление объекта в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление указанного 8-разрядного знакового целого числа в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление числа одинарной точности с плавающей запятой с обычной точностью в данный экземпляр на указанную позицию символа.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)

Вставляет строку в данный экземпляр на указанную позицию символа.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)

Вставляет одну или более копий указанной строки в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление 16-разрядного целого числа без знака в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление 32-разрядного целого числа без знака в данный экземпляр на указанную позицию символа.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)

Вставляет строковое представление 64-разрядного целого числа без знака в данный экземпляр на указанную позицию символа.Inserts the string representation of a 64-bit unsigned integer into this instance at the specified character position.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Удаляет указанный диапазон символов из данного экземпляра.Removes the specified range of characters from this instance.

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

Замещает все вхождения указанного символа в данном экземпляре на другой указанный знак.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)

Замещает все вхождения указанного символа в подстроке данного экземпляра на другой указанный символ.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)

Замещает все вхождения указанной строки в данном экземпляре на другую указанную строку.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)

Замещает все вхождения указанной строки в подстроке данного экземпляра на другую указанную строку.Replaces, within a substring of this instance, all occurrences of a specified string with another specified string.

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

Преобразует значение данного экземпляра в String.Converts the value of this instance to a String.

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

Преобразует значение подстроки этого экземпляра в String.Converts the value of a substring of this instance to a String.

Явные реализации интерфейса

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

Заполняет объект SerializationInfo данными даты, необходимыми для десериализации текущего объекта StringBuilder.Populates a SerializationInfo object with the data necessary to deserialize the current StringBuilder object.

Применяется к

Дополнительно