Введение

В компьютерном программировании, обрезка (trim) или удаление пробелов по краям (strip) — это операция над строками, при которой удаляются начальные и конечные пробелы. Например, строка (в апострофах)

' this is a test '

после обрезки станет

'this is a test'

Левая или правая обрезка

Наиболее популярные варианты функции обрезки удаляют только начало или конец строки. Обычно они называются ltrim и rtrim соответственно, или, в случае Python: lstrip и rstrip. В C# используются TrimStart и TrimEnd, а в Common Lisp – функции обрезки строки слева и справа. В Pascal и Java эти варианты не встроены, хотя в Object Pascal (Delphi) есть функции TrimLeft и TrimRight.

Параметризация списка символов белых пробелов

Многие функции обрезки имеют необязательный параметр для указания списка символов, которые нужно удалить, вместо символов пробела по умолчанию. Например, в PHP и Python этот параметр является необязательным, а в Pascal и Java его нет. В функции обрезки строк Common Lisp этот параметр (называемый набором символов) является обязательным. Библиотека C++ Boost определяет пробельные символы в соответствии с локалью, а также предлагает варианты с параметром-предикатом (функтором) для выбора символов, подлежащих удалению.

Специальное значение обратной связи пустой строки

Необычный вариант функции обрезки строк возвращает специальный результат, если после обрезки не остается ни одного символа. Например, StringUtils из Apache Jakarta имеет функцию stripToNull, которая возвращает null вместо пустой строки.

Нормализация пространства

Нормализация пробелов — это связанная операция над строками, при которой, помимо удаления пробелов в начале и конце строки, любая последовательность пробельных символов внутри строки заменяется на одиночный пробел. Нормализация пробелов выполняется функцией "Trim" в приложениях для работы с электронными таблицами (включая Excel, Calc, Gnumeric и Google Docs), а также функцией "normalize-space" в XSLT и XPath.

Обрезка на месте

В то время как большинство алгоритмов возвращают новую (обрезанную) строку, некоторые изменяют исходную строку непосредственно. Примечательно, что библиотека Boost позволяет выполнять обрезку непосредственно в строке или возвращать обрезанную копию.

Определение белого пространства

Характеры, которые считаются пробельными, различаются в зависимости от языков программирования и их реализаций. Например, в языке C традиционно учитываются только пробел, табуляция, перевод строки и возврат каретки, в то время как языки, поддерживающие Unicode, обычно включают все пробельные символы Unicode. Некоторые реализации также включают в себя ASCII-коды управления (непечатаемые символы) вместе с пробельными символами. Метод `trim` в Java рассматривает пробелы ASCII и коды управления как пробельные, в отличие от метода `isWhitespace` в Java, который распознает все пробельные символы Unicode. Функция `Trim` в Delphi считает символы от U+0000 (NULL) до U+0020 (SPACE) пробельными.

Непространственные пустоты

Блок Unicode "Образцы Брайля" содержит «», шаблон Брайля без рельефных точек. Стандарт Unicode явно указывает, что он не является пробелом. Неразрывный пробел также может рассматриваться как непробельный символ для целей обрезки.