Interested Article - Trim

Trim ( англ. trim — подрезать, подравнять; в некоторых языках — strip ) — строковая функция , которая удаляет начальные и конечные пробелы .

Например, в Python :

'  Это тест  '.strip()

возвращает строку:

'Это тест'

Наиболее популярные варианты функции trim удаляют пробелы только в начале и в конце строк. Обычно они называются ltrim и rtrim соответственно, или в случае языка Python , — lstrip и rstrip . В C# используется название TrimStart и TrimEnd , а в Common Lisp string-left-trim и string-right-trim . В Паскале и в Java нет встроенных вариантов, хотя в Delphi присутствуют функции TrimLeft и TrimRight .

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

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

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

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

Символы, которые относят к пробелам, различаются в разных языках программирования и их реализациях. Например, в Си традиционно считается таковыми символы пробела, табуляции, перевода строки и возврата каретки, в то время как языки, поддерживающие юникод , обычно относят сюда все символы пробелов юникода. Некоторые реализации вместе с символами пробелом также относят сюда и управляющие символы ASCII (непечатаемые символы).

Метод trim в Java считает пробелами и управляющие коды, тогда как метод isWhitespace() распознаёт символы пробелов юникода .

Применение

Реализация в некоторых языках программирования:

Пример использования Язык программирования
String .Trim([ chars ]) C# , Visual Basic .NET , Windows PowerShell
std.string.strip( string ) D
(string-trim '(#\Space #\Tab #\Newline) string ) Common Lisp
(string-trim string ) Scheme
string .trim() Java , JavaScript
Trim( String ) Паскаль
string .strip() Python
strip( string [, option , char ]) REXX
string: strip( string [, option , char ]) Erlang
string .strip Ruby
trim( $string ) PHP
Trim( String ) QBasic , Visual Basic , Delphi
string trim $string Tcl
ALLTRIM( String ) FoxPro
TrimAll( String ), СокрЛП( Строка )

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

Например, в awk для этого можно использовать регулярные выражения :

ltrim(v) = gsub(/^[ \t\r]+/, "", v)
rtrim(v) = gsub(/[ \t\r]+$/, "", v)
trim(v)  = ltrim(v); rtrim(v)

или:

function ltrim(s) { sub(/^[ \t\r]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r]+$/, "", s); return s }
function trim(s)  { return rtrim(ltrim(s)); }

В JavaScript возможность использовать trim() появилась начиная с ECMAScript 5, до этого объекты String можно было расширять с помощью прототипа :

String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g, "");
}

Примечания

  1. от 15 апреля 2009 на Wayback Machine (англ.) (Дата обращения: 25 ноября 2009)
  2. от 27 февраля 2009 на Wayback Machine (англ.) (Дата обращения: 25 ноября 2009)
  3. от 27 февраля 2009 на Wayback Machine (англ.) (Дата обращения: 25 ноября 2009)
  4. Alex Blewitt. (англ.) . InfoQ (9 декабря 2009). Дата обращения: 10 декабря 2009. 28 марта 2012 года.

Ссылки

  • — сравнение нескольких реализаций
Источник —

Same as Trim