Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:
• 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; над этой строкой выполняются операции, не требующие изменения значения строки. Давайте чуть более
• public StringBuilder Append (<объект>). к строке, вызвавшей метод, присоединяется строка, полученная из объекта, который передан методу в качестве параметра. Метод перегружен и может принимать на входе объекты всех простых типов, начиная от char и bool до string и long. Поскольку объекты всех этих типов имеют метод ToString, всегда есть возможность преобразовать объект в строку, которая и присоединяется к исходной строке. В качестве результата возвращается ссылка на объект, вызвавший метод. Поскольку возвращаемую ссылку ничему присваивать не нужно, то правильнее считать, что метод изменяет значение строки;
• public StringBuilder Insert (int location,<объект>). Метод вставляет Строку, полученную из объекта, в позицию, указанную параметром location. Метод Append является частным случаем метода Insert;
• public StringBuilder Remove (int start, int len). Метод удаляет подстроку длины len, начинающуюся с позиции start;
• public StringBuilder Replace (string str1,string str2). Все вхождения подстроки str1 заменяются на строку str2;
• public StringBuilder AppendFormat (<строка форматов>, <объекты>). Метод является комбинацией метода Format класса String и метода Append. Строка форматов, переданная методу, содержит только спецификации форматов. В соответствии с этими спецификациями находятся и форматируются объекты. Полученные в результате форматирования строки присоединяются в конец исходной строки.
За исключением метода Remove, все рассмотренные методы являются перегруженными. В их описании дана схема вызова метода, а не точный синтаксис перегруженных реализаций. Приведу примеры, чтобы продемонстрировать, как вызываются и как работают эти методы:
//Методы Insert, Append, AppendFormat
StringBuilder strbuild = new StringBuilder ;
string str = "это это не";
strbuild.Append(str); strbuild.Append(true);
strbuild.Insert(4,false); strbuild.Insert(0,"2*2=5 — ");
Console.WriteLine(strbuild);
string txt = "А это пшеница, которая в темном чулане
хранится," +" в доме, который построил Джек!";
StringBuilder txtbuild = new StringBuilder;
int num =1;
foreach(string sub in txt.Split (', '))
{
txtbuild.AppendFormat(" {0}: {1} ", num++,sub);
}
str = txtbuild.ToString ;
Console.WriteLine (str);
В этом фрагменте кода конструируются две строки. Первая из них создается из строк и булевых значений true и false. Для конструирования используются методы insert и Append. Вторая строка конструируется в цикле с применением метода AppendFormat. Результатом этого конструирования является строка, в которой простые предложения исходного текста пронумерованы.