Поделиться через


Использование класса StringBuilder

Обновлен: Ноябрь 2007

Объект String неизменен. При каждом использовании методов класса System.String в памяти создается новый объект строки, для которого необходимо выделение нового места. Если необходимо выполнить многократные изменения строки, возможны дополнительные издержки, связанные с созданием нового объекта String. Класс System.Text.StringBuilder может использоваться при необходимости изменения строки без создания нового объекта. Например, использование класса StringBuilder может повысить производительность при соединении в цикле большого количества строк.

Установка объекта StringBuilder

Новый экземпляр класса StringBuilder создается с помощью назначения переменной с использованием одного из вариантов перегруженного конструктора, как это показано в следующем примере.

Dim MyStringBuilder As New StringBuilder("Hello World!")
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

Настройка емкости и длины

Несмотря на то что StringBuilder является динамическим объектом, который позволяет расширить число символов в инкапсулируемой строке, имеется возможность ограничить количество содержащихся в ней символов, указав соответствующее значение. Это значение называется емкостью объекта, и его нельзя путать с длиной текущей строки, содержащейся в текущем экземпляре StringBuilder. Например, можно создать новый экземпляр класса StringBuilder со строкой "Hello" длиной 5, при этом можно указать, что объект имеет максимальную емкость 25. При изменении StringBuilder размер не будет перераспределен, пока не будет достигнута соответствующая емкость. Когда это происходит, новое пространство выделяется автоматически, а емкость удваивается. Емкость класса StringBuilder можно задать с помощью одного из перегруженных конструкторов. В следующем примере указывается, что объект MyStringBuilder можно расширить максимум до 25 позиций.

Dim MyStringBuilder As New StringBuilder("Hello World!", 25) 
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);  

Кроме того, можно использовать свойство чтения/записи Capacity, чтобы установить максимальную длину объекта. В следующем примере свойство Capacity используется для задания наибольшей длины объекта.

MyStringBuilder.Capacity = 25
MyStringBuilder.Capacity = 25;

Метод EnsureCapacity может использоваться для проверки емкости текущего StringBuilder. Если емкость превышает переданное значение, то изменение не происходит; однако, если емкость меньше переданного значения, то текущая емкость изменяется, чтобы соответствовать переданному значению.

Свойство Length также может быть задано и просмотрено. Если для свойства Length установлено значение, большее чем значение свойства Capacity, то свойство Capacity автоматически изменяется на то же значение, что и свойство Length. При задании значения свойства Length, которое меньше длины строки в текущем StringBuilder, строка укорачивается.

Изменение строки StringBuilder

В следующей таблице перечислены методы, используемые для изменения содержимого StringBuilder.

Название метода

Использование

StringBuilder.Append

Добавляет информацию в конец текущего StringBuilder.

StringBuilder.AppendFormat

Заменяет спецификатор формата, переданный в строку с форматированным текстом.

StringBuilder.Insert

Вставляет строку или объект в заданный индекс текущего StringBuilder.

StringBuilder.Remove

Удаляет заданное число знаков из текущего StringBuilder.

StringBuilder.Replace

Заменяет заданный символ по указанному индексу.

Добавление

Метод Append используется для добавления текста или строкового представления объекта к концу строки, представленного текущим StringBuilder. В следующем примере для "Hello World" инициализируется StringBuilder, а затем к концу объекта добавляется некоторый текст. Место выделяется автоматически по мере необходимости.

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Append(" What a beautiful day.")
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'       Hello World! What a beautiful day.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.

AppendFormat

Метод AppendFormat добавляет текст в конец StringBuilder, но также реализует интерфейс IFormattable и поэтому принимает строки стандартного формата, описанные в разделе о форматировании. Этот метод используется для настройки формата переменных и добавляет эти значения в StringBuilder. В следующем примере используется метод AppendFormat для размещения целого числа в формате денежной единицы в конце StringBuilder.

Dim MyInt As Integer = 25
Dim MyStringBuilder As New StringBuilder("Your total is ")
MyStringBuilder.AppendFormat("{0:C} ", MyInt)
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'     Your total is $25.00  
int MyInt = 25; 
StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Your total is $25.00      

Insert

Метод Insert добавляет строку или объект в указанную позицию текущего StringBuilder. В следующем примере этот метод используется для вставки слова в шестую позицию StringBuilder.

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Insert(6, "Beautiful ")
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'      Hello Beautiful World!
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!

Remove

Метод Remove используется для удаления указанного числа символов из текущего StringBuilder, начиная с указанного индекса, отсчитывающегося с нуля. В следующем примере для сокращения StringBuilder используется метод Remove.

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Remove(5, 7)
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'       Hello
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello

Replace

Метод Replace используется для замены символов в объекте StringBuilder на другие заданные символы. В следующем примере метод Replace используется для поиска в объекте StringBuilder всех экземпляров восклицательного знака (!) и их замены на вопросительный знак (?).

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'       Hello World?
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World?

См. также

Ссылки

System.Text.StringBuilder

Другие ресурсы

Основные операции со строками