Можливості, що надаються класом string, широкі, проте вимога незмінності його об'єктів може виявитися незручною. В цьому випадку для роботи з рядками застосовується клас StringBuilder, визначений в просторі імен System.Text і що дозволяє змінювати значення своїх екземплярів.
При створенні екземпляра необхідно використовувати операцію new і конструктор, наприклад:
StringBuilder а=new StringBuilder(); // 1
StringBuilder b=new StringBuilder("qwerty"); // 2
StringBuilder с=new StringBuilder(100); // 3
StringBuilder d=new StringBuilder("qwerty", 100); // 4
StringBuilder e=new StringBuilder("qwerty",1, 3, 100); // 5
У конструкторі класу указуються два види параметрів: рядок, що ініціалізував, або підрядок і об'єм пам'яті, що відводиться під екземпляр (ємність буфера). Один або обидва параметри можуть бути відсутніми, в цьому випадку використовуються їх значення за умовчанням.
Якщо застосовується конструктор без параметрів (оператор 1), створюється порожній рядок розміру, заданого за умовчанням (16 байт). Інші види конструкторів задають об'єм пам'яті, рядку, що виділяється, і/або її початкове значення. Наприклад, в операторі 5 об'єкт ініціалізувався підрядком завдовжки 3 символи, починаючи з першого (підрядок "wer"). Основні елементи класу StringBuilder приведені в таблиці 6.6.
Таблиця 6.6
Основні елементи класу System.Text.StringBuilder
Назва
| Вид
| Опис
|
Append
| Метод
| Додавання в кінець рядка. Різні варіанти методу дозволяють додавати в рядок величини будь-яких вбудованих типів, масиви символів, рядка і підрядка типу string
|
AppendFormat
| Метод
| Додавання форматованого рядка в кінець рядка
|
Capacity
| Властивість
| Отримання або установка ємності буфера. Якщо встановлюване значення менше поточної довжини рядка або більше максимального, генерується виключення ArgumentOutOfRangeException
|
Insert
| Метод
| Вставка підрядка в задану позицію
|
Length
| Властивість
| Довжина рядка (кількість символів)
|
MaxCapacity
| Властивість
| Максимальний розмір буфера
|
Remove
| Метод
| Видалення підрядка із заданої позиції
|
Replace
| Метод
| Заміна всіх входжень заданого підрядка або символу новим підрядком або символом
|
ToString
| Метод
| Перетворення в рядок типу string
|
Приклад застосування методів приведений в лістингу 6.12.
Лістинг 6.12. Робота з рядками типу StringBuilder
using System;
using System.Text;
namespace ConsoleApplication1
{
class examp38
{
static void Main()
{
Console.Write("Введіть зарплату: ");
double salary = double.Parse(Console.ReadLine());
StringBuilder a = new StringBuilder();
a.Append("зарплата ");
a.AppendFormat("{0,6:C} - в рік {1,6:C}", salary, salary * 12);
Console.WriteLine(a);
a.Replace("р.","тис.$");
Console.WriteLine("А краще було б: " + a);
}
}
}
Результат роботи програми:
Введіть зарплату: 3500
зарплата 3 500.00р. - в рік 42 000,00р.
А краще було б: зарплата 3 500,00тис.$ - в рік 42 000.00тис.$
Ємність буфера не відповідає кількості символів в рядку і може збільшуватися в процесі роботи програми як в результаті прямих вказівок програміста, так і унаслідок виконання методів зміни рядка, якщо рядок в результаті перевищує поточний розмір буфера. Програміст може зменшити розмір буфера за допомогою властивості Capacity, щоб не позичати зайву пам'ять.