2.4 Класс StringBuilder
Достаточно широкие возможности класса System.String, к сожалению, не могут покрыть все потребности процесса обработки строковой информации. Главным ограничивающим препятствием здесь является требование неизменности его объектов.
В том случае, когда строку все же необходимо изменить, для работы со строками удобно применять другой класс - класс StringBuilder. Данный класс, позволяющий изменять значение своих экземпляров, определен в пространстве имен System.Text.
При создании экземпляра обязательно использовать операцию new и конструктор, например:
StringBuilder s = new StringBuilder();
Подобная инициализация является наиболее простой – в ней отсутствуют инициализирующие параметры, которые в данном случае принимают значения по умолчанию. При этом создается пустая строка размером 16 байт.
В общем случае в конструкторе класса могут присутствовать два вида параметров. Первый вид параметров используется для инициализации строки, второй - для определения объема памяти (размера буфера), отводимой под экземпляр, например:
StringBuilder stud = new StringBuilder( "student", 50 );
При необходимости в целях экономии памяти размер буфера можно уменьшить с помощью свойства Сарасity. Если же в процессе работы программы вследствие выполнения некоторых методов получена строка, размер которой превышает текущий размер буфера, то размер буфера автоматически будет увеличен.
Емкость буфера, не соответствующая количеству символов в строке, может увеличиваться и в результате прямых указаний программиста.
Впрочем, один или оба параметра (как уже было сказано, и как видно из первого примера) могут отсутствовать.
В следующем примере приведен еще один вид конструктора, где задан объем памяти, выделяемой строке, и ее начальное значение. Объект инициализируется подстрокой длиной 4 символа, начиная с первого (подстрока " stud ").
StringBuilder stud = new StringBuilder( "student", 1, 4, 50 );
Основные элементы класса StringBuilder приведены в таблице 3.
Таблица 3 - Основные элементы класса System.Text.StringBuilder
Название |
Вид |
Описание |
Append |
Метод |
Добавление в конец строки. Разные варианты метода позволяют добавлять в строку величины любых встроенных типов, массивы символов, строки и подстроки типа string |
AppendFormat |
Метод |
Добавление форматированной строки в конец строки |
Capacity |
Свойство |
Получение или установка емкости буфера. Если устанавливаемое значение меньше текущей длины строки или больше максимального, генерируется исключение ArgumentOutOfRangeException |
Insert |
Метод |
Вставка подстроки в заданную позицию |
Length |
Свойство |
Длина строки (количество символов) |
MaxCapacity |
Свойство |
Максимальный размер буфера |
Remove |
Метод |
Удаление подстроки из заданной позиции |
Replace |
Метод |
Замена всех вхождений заданной подстроки или символа новой подстрокой или символом |
ToString |
Метод |
Преобразование в строку типа string |
Пример 6. Демонстрация использования методов класса System.Text.StringBuilder.
Листинг 5
using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
string s;
StringBuilder w = new StringBuilder();
w.Append( "снег,лед,гололед,дождь " );
Console.WriteLine(w);
w.Insert(5,"солнце,");
Console.WriteLine(w);
Console.WriteLine("Введите построку");
s=Console.ReadLine();
w.Insert(0,s);
Console.WriteLine(w);
w.Replace( ",", ";" );
Console.WriteLine(w);
}
}
}
Включив в программу строку using System.Text мы тем самым сделали доступным класс StringBuilder, определенный в его пространстве имен.
В программе объявлены две строки: s-статическая и w-динамическая. Поскольку строка w не инициализирована, то вызов метода w.Append("снег,лед,гололед,дождь") преобразует строку, поместив в нее указанную в методе строку.
Вызов метода w.Insert(5,"солнце,") обеспечивает вставку подстроки "солнце," в строку w, начиная с позиции 5.
Вызов метода w.Insert(0,s) обеспечивает вставку подстроки s (белый,) в строку w, начиная с позиции 0.
Вызов метода w.Replace(",",";") производит замену всех вхождений символа "," новым символом ";".
Результаты работы программы:
