English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В C# тип строки не изменяем. Это означает, что после создания строки ее нельзя изменить. Например, новый строковый объект "Hello World!" займет место в памяти на стеке. Теперь, если изменить начальную строку с "Hello World!" на "Hello World! from Tutorials Teacher", в памяти на стеке создается новый строковый объект, а не встречается в той же памяти, что и оригинальная строка. Если вносить изменения через замену, добавление, удаление или вставку новых строк несколько раз в оригинальную строку, это может повлиять на производительность.
Ассигнование памяти для объекта строки
Для решения этой проблемы в C# был введен StringBuilder в пространстве имён System.Text. 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 не является строкой. Используйте метод ToString () для извлечения строки из объекта StringBuilder.
StringBuilder sb = new StringBuilder("Hello World!"); var greet = sb.ToString(); // Возвращает «Hello World!"
Использование метода 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#
Используйте метод AppendFormat() для форматирования вводимой строки в указанном формате и затем добавления её.
StringBuilder sbAmout = new StringBuilder("Ваша общая сумма составляет "); sbAmout.AppendFormat("{0:C} ", 25); Console.WriteLine(sbAmout); // Вывод: Ваша общая сумма составляет $25.00
Используйте метод Insert() для вставки строки в указанный индекс объекта StringBuilder.
StringBuilder sb = new StringBuilder("Hello World!"); sb.Insert(5, " C#"); Console.WriteLine(sb); // Вывод: Hello C# World!
Используйте метод Remove() для удаления строки от указанного индекса до указанной длины.
StringBuilder sb = new StringBuilder("Hello World!", 50); sb.Remove(6, 7); Console.WriteLine(sb); // Вывод: 你好
Используйте метод Replace() для замены всех出现的指定字符串 на указанную замену.
StringBuilder sb = new StringBuilder("Hello World!"); sb.Replace("World", "C# "); Console.WriteLine(sb); // Вывод: Hello C#!
StringBuilder является изменяемым.
При добавлении нескольких строк StringBuilder быстрее, чем string.
Используйте StringBuilder, когда вам нужно добавить три или более строк.
Используйте метод Append() для добавления или подключения строки к объекту StringBuilder.
Используйте метод ToString() для извлечения строки из объекта StringBuilder.