- •Глава 9. Многомерные массивы
- •9.1 Прямоугольные массивы
- •9.1.1 Объявления и инициализация
- •9.1.2 Примеры
- •9.2 Ступенчатые массивы
- •9.2.1 Объявления и инициализация
- •9.2.2 Примеры
- •9.3 Оператор цикла с перебором foreach
- •9.4 Массивы с числом размерностей больше двух
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 10. Исключительные ситуации
- •10.1 Основные понятия
- •10.2 Механизм обработки исключений
- •10.3 Примеры обработки исключений
- •10.4 Оператор throw
- •10.5 Дополнительные сведения
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 11. Обработка текстовой информации
- •11.1 Символьный тип char
- •11.2 Массив символов
- •11.3 Тип String
- •11.4 Класс StringBuilder
- •11.5 Форматирование строк
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
11.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приведены в таблице 11.3.
Пример 6. Демонстрация использования методов классаSystem.Text.StringBuilder.
Листинг 6
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(",",";")производит замену всех вхождений символа","новым символом";".
Результаты работы программы:
Таблица 11.3 Основные элементы класса System.Text.StringBuilder
Название |
Вид |
Описание |
Append |
Метод |
Добавление в конец строки. Например: w.Append("снег") – в конец строки w добавлен текст "снег" |
AppendFormat |
Метод |
Добавление форматированной строки в конец строки |
Capacity |
Свойство |
Получение или установка емкости буфера. Если устанавливаемое значение меньше текущей длины строки или больше максимального, генерируется исключение ArgumentOutOfRangeException |
Insert |
Метод |
Вставка подстроки в заданную позицию. Например: w.Insert(5, "солнце") – вставка подстроки "солнце", начиная с 5-ой позиции строки w |
Length |
Свойство |
Длина строки (количество символов) |
MaxCapacity |
Свойство |
Максимальный размер буфера |
Remove |
Метод |
Удаление подстроки из заданной позиции. Например: w.Remove(i, 3) – удаление подстроки длиной 3 символа, начиная с позиции с номером i |
Replace |
Метод |
Замена всех вхождений заданной подстроки или символа новой подстрокой или символом. Например: w.Replace(",", ";") – замена всех "," на ";". w.Replace(",", "") – удалит все "," без замены |
ToString |
Метод |
Преобразование в строку типа string. Например: w.ToString() |