Более эффективная работа со строками

  • docx
  • 27.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-002973.docx

 Более эффективная работа со строками

Строки типа string представляют собой неизменяемые объекты: после того, как строка инициализирована, изменить её уже нельзя. Рас- смотрим для примера следующий код:

 

string s = "Hello, "; s += "world!";

 

Здесь компилятор создаёт в памяти строковый объект и инициали- зирует его строкой «Hello, », а затем создаёт другой строковый объект и инициализирует его значением первого объекта и новой строкой

«world!», а затем заменяет значение переменной s на новый объект. В результате строка s содержит именно то, что хотел программист, однако в памяти остаётся и изначальный объект со строкой «Hello, ». Конечно, со временем сборщик мусора уничтожит этот бесхозный объект, однако если в программе идёт интенсивная работа со строками, то таких бес- хозных объектов может оказаться очень много. Как правило, это нега- тивно сказывается на производительности программы и объеме потреб- ляемой ею памяти.

Чтобы компилятор не создавал каждый раз новый строковый объ- ект, разработчики языка C# ввели другой строковый класс:

StringBuilder. Приведённый выше пример с использованием этого класса будет выглядеть следующим образом:

 

StringBuilder s = new StringBuilder("Hello, "); s.Append("world!");

 

Конечно, визуально этот код выглядит более сложным, зато при ак- тивном использовании строк в программе он будет гораздо эффектив- нее. Помимо добавления строки к существующему объекту (Append) класс StringBuilder имеет ещё ряд полезных методов:

·               Insert: вставляет указанный текст в нужную позицию исход- ной строки

·               Remove: удаляет часть строки

·               Replace: заменяет указанный текст в строке на другой

Если нужно преобразовать объект StringBuilder в обычную стро- ку, то для этого можно использовать метод ToString():

 

StringBuilder s = new StringBuilder("Яблоко"); string a = s.ToString();