Строковый объект в Python является неизменяемым, что означает, что каждый раз, когда строковое значение присваивается переменной, в памяти создается новый объект для описания нового значения. Объекты StringBuilder аналогичны объектам String, за исключением того, что их можно изменять. Класс StringBuilder в Java также используется для создания изменяемых строковых объектов.
StringBuilder в Python
Есть ли какой-нибудь строковый класс в Python? Нет, в Python нет встроенного построителя строк. Следовательно, нет однозначной корреляции. Однако этому есть логическое объяснение. Создание длинных строк в Python иногда может привести к длительному выполнению кода.
Хотя в последних версиях Python есть способы построения строк. Один из распространенных способов создания больших строк из кусочков состоит в том, чтобы увеличить список строк и соединить его, когда вы закончите. Это часто используемая идиома Python. Чтобы построить строки, объединяющие данные с форматированием, вы должны выполнить форматирование отдельно.
Чтобы создать пользовательский построитель строк в Python, используйте один из следующих способов:
- Использование метода string.join().
- Применение конкатенации строк.
- Использование модуля StringIO.
Использование метода string.join()
string.join() — это встроенный метод Python, который возвращает строку, объединенную с элементами итерируемого объекта. Например, мы можем использовать функцию join() для соединения строк из списка.
Пример
|
1 2 3 |
marvel = ['Loki' for i in range(7)] studios = "".join(marvel) print(studios) |
Выход:
|
1 |
LokiLokiLokiLokiLokiLokiLoki |
Вы можете видеть, что он печатает Loki семь раз.
Использование конкатенации строк
Чтобы объединить строки из списка, используйте оператор объединения(+) и цикл for.
Пример
|
1 2 3 4 5 6 |
marvel = ['Loki' for i in range(7)] studios = "" for i in range(len(marvel)): studios += marvel[i] print(studios) |
Выход:
|
1 |
LokiLokiLokiLokiLokiLokiLoki |
С помощью модуля StringIO
StringIO — это встроенный модуль Python, который может читать и записывать строки в буфер памяти. Во-первых, мы создаем объект StringIO и пишем его после цикла по списку. Затем мы можем вывести нужную строку, используя метод getvalue().
Пример
Для работы с модулем StringIO вам необходимо импортировать его в заголовок вашего файла.
|
1 |
from io import StringIO |
Теперь создайте класс StringBuilder и определите три метода этого класса.
|
1 2 3 4 5 6 7 8 9 10 11 |
class StringBuilder: _file_str = None def __init__(self): self._file_str = StringIO() def Add(self, str): self._file_str.write(str) def __str__(self): return self._file_str.getvalue() |
Метод Add() добавляет строки к этой функции, а метод _str_() возвращает объединенные строки.
Последним шагом является вызов этих функций путем создания объекта класса.
|
1 2 3 4 5 6 7 |
string_builder = StringBuilder() string_builder.Add("Snyder ") string_builder.Add("Cut ") string_builder.Add("2021") print(string_builder) |
См. следующий полный код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from io import StringIO class StringBuilder: _file_str = None def __init__(self): self._file_str = StringIO() def Add(self, str): self._file_str.write(str) def __str__(self): return self._file_str.getvalue() string_builder = StringBuilder() string_builder.Add("Snyder ") string_builder.Add("Cut ") string_builder.Add("2021") print(string_builder) |
Выход:
|
1 |
Snyder Cut 2021 |
И мы получили конкатенацию строк, как и ожидали.
