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.[1]

Многие функции 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.

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

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

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

Применение

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

Пример использования Язык программирования
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) Паскаль[3]
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()[4] появилась начиная с ECMAScript 5, до этого объекты String можно было расширять с помощью прототипа:

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

Примечания

  1. Функция trim в языке FreePascal Архивная копия от 15 апреля 2009 на Wayback Machine (англ.) (Дата обращения: 25 ноября 2009)
  2. Функция isWhitespace в Java Архивная копия от 27 февраля 2009 на Wayback Machine (англ.) (Дата обращения: 25 ноября 2009)
  3. Функция Trim в Паскале Архивная копия от 27 февраля 2009 на Wayback Machine (англ.) (Дата обращения: 25 ноября 2009)
  4. Alex Blewitt. ECMAScript 5 released (англ.). InfoQ (9 декабря 2009). Дата обращения: 10 декабря 2009. Архивировано 28 марта 2012 года.

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.