Иллюстрированный самоучитель по Visual Basic .NET

Пример: класс String, класс StringBuilder

Примечание
Сколько времени теряется при создании новых экземпляров строки? Мы провели тестирование (при этом использовалась программа, приведенная в подразделе "Хронометраж – насколько быстрее работает класс StringBuilder?" ниже). Оказалось, что класс StringBuilder обычно работает в сотни раз быстрее, чем класс String. На практике это соотношение может быть и выше, поскольку в наших тестах не использовались дополнительные возможности класса StringBuilder, позволяющие избежать частого выделения памяти. В результате оптимизации класс StringBuilder может работать еще быстрее. С другой стороны, если вы просто обращаетесь к отдельным символам строки и не собираетесь изменять ее, обычный класс String оказывается эффективнее класса StringBuitder
.

В следующем фрагменте показано, как быстро создать строку, состоящую из 25 000 повторений буквы А:

Dim bar As New String("A".25000)
Dim foo As New System.Text.SthngBuilder(Bar)

Свойство Chars позволяет прочитать или записать символ, находящийся в заданной позиции StringBuiIder. Индексация начинается с 0, поэтому для экземпляра StringBuilder с именем foo команда foo.Chars(l) = "b заменяет второй символ строки символом "b".

При помощи свойства Length можно получить или задать текущий размер объекта StringBuilder. Если указанное значение меньше текущего размера, VB усекает объект StringBuilder. Если при создании объекта StringBuilder была задана максимальная вместимость, в случае ее превышения инициируется исключение (исключения рассматриваются в главе 7).

Часто используемые члены класса StrlngBuilder очень сильно перегружены. Они существуют в большом количестве версий, что позволяет выполнять со строками разнообразные операции – включать и удалять в них строки, символы, массивы символов и т. д. Например, метод Append добавляет символы в конец объекта StringBuilder:

Dim foo As New System.Text.StringBuilder()
foo = foo.Append("A")
foo.Appenc("hello")
' Добавляет 5 символов
foo.Append(37)
' Добавляет 2 символа
foo. Append (new Random()) '??

Как показывает последняя строка приведенного фрагмента, к объекту StringBuiIder можно присоединить произвольный объект. При этом VB автоматически вычисляет строковое представление объекта (а точнее, вызывает его метод ToString) и присоединяет полученную строку к StringBuilder. Конечно, осмысленность строкового представления объекта зависит от реализации класса. В приведенном примере вместо случайного числа будет добавлена бесполезная строка System.Random (но команда foo. Append (New Random(). Next приведет к желаемому результату).

Метод Insert вставляет объект или значение в заданную позицию объекта StringBuilder:

Insert(ByVal index As Integer.ByVal thing As Object)

Похожую сигнатуру имеет и метод Remove, удаляющий заданное количество символов с заданной позиции:

Remove(ByVal startlndex As Integer.ByVal length As Integer)

Перегруженные версии метода Replace выполняют несколько полезных операций:

  • Replace(ByVal oldChar As Char. ByVal newChar As Char): заменяет все вхождения старого символа в строке новым символом;
  • Replace (ByVal oldValue As String. ByVal newValue As String): заменяет все вхождения старой подстроки новой подстрокой.

У этого метода существуют еще две версии, позволяющие заменить все вхождения заданной подстроки или символа в заданном фрагменте объекта StringBuilder (параметр count определяет длину фрагмента):

Repliсе(ByVal oldChar As Char.ByVal newChar As Char.ByVal startlndex
As Integer._ ByVal count A's Integer)

ReplacefoldValue As String.ByVal newValue As String.ByVal startlndex
As Integer._ ByVal count As Integer)

Примечание
В классе StringBuilder определен метод Equals, но в отличие от строк два объекта StringBuilder с одинаковым содержимым не обязательно считаются равными. Это объясняется тем, что в .NET Framework истинное выражение a.Equals(b) должно оставаться истинным всегда, а для объектов StringBuilder это невозможно, поскольку они изменяются. Использовать метод Equals для объектов StringBuilder не рекомендуется
.

Метод ToString преобразует объект StringBuilder в String. Это делается лишь после того, как все необходимые изменения будут внесены и в дальнейшем вы собираетесь только читать содержимое4 строки.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.