Выбрать главу

StartsWith, EndsWith ∙ Возвращается true или false, в зависимости оттого, начинается или заканчивается строка заданной подстрокой

PadLeft, PadRight ∙ Выполняет набивку нужным числом пробелов в начале и в конце строки

Trim, TrimStart, TrimEnd ∙ Обратные операции к методам Pad. Удаляются пробелы в начале и в конце строки, или только с одного ее конца

ToCharArray ∙ Преобразование строки в массив символов

Класс StringBuilder — построитель строк

Класс string не разрешает изменять существующие объекты. Строковый класс StringBuilder позволяет компенсировать этот недостаток. Этот класс принадлежит к изменяемым классам и его можно найти в пространстве имен System.Text. Рассмотрим класс StringBuilder подробнее.

Объявление строк. Конструкторы класса StringBuilder

Объекты этого класса объявляются с явным вызовом конструктора класса. Поскольку специальных констант этого типа не существует, то вызов конструктора для инициализации объекта просто необходим. Конструктор класса перегружен, и наряду с конструктором без параметров, создающим пустую строку, имеется набор конструкторов, которым можно передать две группы параметров. Первая группа позволяет задать строку или подстроку, значением которой будет инициализироваться создаваемый объект класса StringBuilder. Вторая группа параметров позволяет задать емкость объекта — объем памяти, отводимой данному экземпляру класса StringBuilder. Каждая из этих групп не является обязательной и может быть опущена. Примером может служить конструктор без параметров, который создает объект, инициализированный пустой строкой, и с некоторой емкостью, заданной по умолчанию, значение которой зависит от реализации. Приведу в качестве примера синтаксис трех конструкторов:

• public StringBuilder (string str, int cap). Параметр str задает строку инициализации, cap — емкость объекта;

 public StringBuilder (int curcap, int maxcap). Параметры curcap и maxcap задают начальную и максимальную емкость объекта;

• public StringBuilder (string str, int start, int len, int cap). Параметры str, start, len задают строку инициализации, cap — емкость объекта.

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

Над строками этого класса определены практически те же операции с той же семантикой, что и над строками класса String:

• присваивание (=);

• две операции проверки эквивалентности (==) и (!=);

• взятие индекса ([]).

Операция конкатенации (+) не определена над строками класса StringBuilder, ее роль играет метод Append, дописывающий новую строку в хвост уже существующей.

Со строкой этого класса можно работать как с массивом, но, в отличие от класса String, здесь уже все делается как надо: допускается не только чтение отдельного символа, но и его изменение. Рассмотрим с небольшими модификациями наш старый пример:

public void TestStringBuilder()

{

    //Строки класса StringBuilder

    //операции над строками

    StringBuilder s1 =new StringBuilder("ABC"),

        s2=new StringBuilder("CDE");

    StringBuilder s3 = new StringBuilder ();

    //s3=s1 + s 2;

    s3=s1.Append(s2);

    bool b1 = (s1==s3);

    char ch1 = s1 [0], ch2 = s2[0];

    Console.WriteLine("s1={0}, s2={l}, b1={2}," +

    "ch1={3}, ch2={4}", s1,s2,b1,ch1,ch2);

    s2 = s1;

    b1 = (s1!=s2);

    ch2 = s2 [0];

    Console.WriteLine("s1={0}, s2={1}, b1={2}," +

         "ch1={3 }, ch2={4 } ", s1,s2,b1,ch1,ch2);

    StringBuilder s = new StringBuilder("Zenon");

    s [0] = ' L ';

    Console.WriteLine(s);

}//TestStringBuilder

Этот пример демонстрирует возможность выполнения над строками класса StringBuilder тех же операций, что и над строками класса String. В результате присваивания создается дополнительная ссылка на объект, операции проверки на эквивалентность работают со значениями строк, а не со ссылками на них. Конкатенацию можно заменить вызовом метода Append. Появляется новая возможность — изменять отдельные символы строки. (Для того чтобы имя класса StringBuilder стало доступным, в проект добавлено предложение using System.Text, ссылающееся на соответствующее пространство имен.)

Основные методы

У класса StringBuilder методов значительно меньше, чем у класса String. Это и понятно — класс создавался с целью дать возможность изменять значение строки. По этой причине у класса есть основные методы, позволяющие выполнять такие операции над строкой как вставка, удаление и замена подстрок, но нет методов, подобных поиску вхождения, которые можно выполнять над обычными строками. Технология работы обычно такова: конструируется строка класса StringBuilder; выполняются операции, требующие изменение значения; полученная строка преобразуется в строку класса String; над этой строкой выполняются операции, не требующие изменения значения строки. Давайте чуть более подробно рассмотрим основные методы класса StringBuilder: