English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C#基础教程

C#高级教程

C#面向对象(OOP)

StringBuilder в C#

В C# тип строки не изменяем. Это означает, что после создания строки ее нельзя изменить. Например, новый строковый объект "Hello World!" займет место в памяти на стеке. Теперь, если изменить начальную строку с "Hello World!" на "Hello World! from Tutorials Teacher", в памяти на стеке создается новый строковый объект, а не встречается в той же памяти, что и оригинальная строка. Если вносить изменения через замену, добавление, удаление или вставку новых строк несколько раз в оригинальную строку, это может повлиять на производительность.

Ассигнование памяти для объекта строки

Для решения этой проблемы в C# был введен StringBuilder в пространстве имён System.Text. StringBuilder не создает новый объект в памяти, а динамически увеличивает объем памяти для容纳 измененной строки.

Ассигнование памяти для объекта StringBuilder

Создание объекта StringBuilder

Вы можете создать объект класса StringBuilder, используя ключевое слово new и передавая начальную строку. Ниже приведен пример создания объекта StringBuilder.

using System.Text; // Введение
            
StringBuilder sb = new StringBuilder(); // В будущем будет добавлена строка
// Или
StringBuilder sb = new StringBuilder("Hello World!");

Либо вы можете использовать перегруженный конструктор для указания максимального объема объекта StringBuilder, как показано ниже.

StringBuilder sb = new StringBuilder(50); // В будущем будет добавлена строка
// Или
StringBuilder sb = new StringBuilder("Hello World!", 50);

В C#, по порядку на стека в памяти отводится до 50 пространств. После достижения указанного объема, этот объем автоматически удваивается. Вы также можете использовать свойства capacity или length для установки или извлечения объема объекта StringBuilder.

Вы можете использовать цикл for, чтобы получить или установить символ в указанном индексе.

StringBuilder sb = new StringBuilder("Hello World!");
for(int i = 0; i < sb.Length; i++){
 Console.Write(sb[i]); // Вывод: Hello World!
}

Извлечение строки из StringBuilder

StringBuilder не является строкой. Используйте метод ToString () для извлечения строки из объекта StringBuilder.

StringBuilder sb = new StringBuilder("Hello World!");
var greet = sb.ToString(); // Возвращает «Hello World!"

Добавление/приложение строки к StringBuilder

Использование метода Append () для добавления строки в конец текущего объекта StringBuilder. Если StringBuilder еще не содержит строки, он добавит ее. Метод AppendLine () добавляет символ новой строки в конец строки.

StringBuilder sb = new StringBuilder();
sb.Append("Hello ");
sb.AppendLine("World!");
sb.AppendLine("Hello C#");
Console.WriteLine(sb);
Вывод:
Hello World!
Hello C#

Добавление отформатированной строки к StringBuilder

Используйте метод AppendFormat() для форматирования вводимой строки в указанном формате и затем добавления её.

StringBuilder sbAmout = new StringBuilder("Ваша общая сумма составляет ");
sbAmout.AppendFormat("{0:C} ", 25);
Console.WriteLine(sbAmout); // Вывод: Ваша общая сумма составляет $25.00

Вставка String в StringBuilder

Используйте метод Insert() для вставки строки в указанный индекс объекта StringBuilder.

StringBuilder sb = new StringBuilder("Hello World!");
sb.Insert(5, " C#"); 
Console.WriteLine(sb); // Вывод: Hello C# World!

Удаление строки в StringBuilder

Используйте метод Remove() для удаления строки от указанного индекса до указанной длины.

StringBuilder sb = new StringBuilder("Hello World!", 50);
sb.Remove(6, 7);
Console.WriteLine(sb); // Вывод: 你好

Замена строки в StringBuilder

Используйте метод Replace() для замены всех出现的指定字符串 на указанную замену.

StringBuilder sb = new StringBuilder("Hello World!");
sb.Replace("World", "C# ");
Console.WriteLine(sb); // Вывод: Hello C#!
Типы, которые нужно запомнить:
  1. StringBuilder является изменяемым.

  2. При добавлении нескольких строк StringBuilder быстрее, чем string.

  3. Используйте StringBuilder, когда вам нужно добавить три или более строк.

  4. Используйте метод Append() для добавления или подключения строки к объекту StringBuilder.

  5. Используйте метод ToString() для извлечения строки из объекта StringBuilder.