Из Википедии, свободной энциклопедии
  (Перенаправлено из обработки строк )
Перейти к навигации Перейти к поиску

Строковые функции используются в языках программирования для управления строкой или запроса информации о строке (некоторые делают и то, и другое).

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

Для функций, которые управляют строками, современные объектно-ориентированные языки, такие как C # и Java, имеют неизменяемые строки и возвращают копию (во вновь выделенной динамической памяти), в то время как другие, такие как C, манипулируют исходной строкой, если программист не копирует данные в новую строку. См., Например, « Конкатенацию» ниже.

Самый простой пример строковой функции - это length(string)функция. Эта функция возвращает длину строкового литерала .

например length("hello world"), вернет 11.

Другие языки могут иметь строковые функции с аналогичным или точно таким же синтаксисом или параметрами или результатами. Например, во многих языках функция длины обычно представлена ​​как len (строка) . Приведенный ниже список общих функций призван помочь ограничить эту путаницу.

Общие строковые функции (многоязычный справочник) [ править ]

Ниже перечислены строковые функции, общие для многих языков, включая различные используемые имена. Приведенный ниже список общих функций призван помочь программистам найти эквивалентную функцию в языке. Обратите внимание: конкатенация строк и регулярные выражения обрабатываются на отдельных страницах. Заявления в гильеметах («…») необязательны.

CharAt [ править ]

{Пример на Паскале} var  MyStr :  string  =  'Hello, World' ;  MyChar :  Char ; begin  MyChar  : =  MyStr [ 2 ] ;  // 'е'
# Пример на АЛГОЛе 68 #«Привет, мир» [2]; // 'е'
// Пример на C #include  <stdio.h>  // для printfchar  MyStr []  =  "Привет, мир" ; printf ( "% c" ,  * ( MyStr + 1 ));  // 'e' printf ( "% c" ,  * ( MyStr + 7 ));  // 'W' printf ( "% c" ,  MyStr [ 11 ]);  // 'd' printf ( "% s" ,  MyStr );  // 'Hello, World' printf ( "% s" ,  "Hello (2), World (2)"); // 'Привет (2), мир (2)'
// Пример на C ++ #include  <iostream>  // для "cout"#include  <string.h>  // для типа данных "строка"используя  пространство имен  std ; char  MyStr1 []  =  "Привет (1), мир (1)" ; строка  MyStr2  =  "Привет (2), мир (2)" ; cout  <<  "Привет (3), Мир (3)" ;  // 'Hello (3), World (3)' cout  <<  MyStr2 [ 6 ];  // '2' cout  <<  MyStr1 . substr  ( 5 ,  3 );  // '(1)'
// Пример на C # и Ya "Hello, World" [ 2 ];  // 'l'
# Пример в Perl 5 substr ( "Hello, World" ,  1 ,  1 );  # 'e'
# Примеры на Python "Hello, World" [ 2 ]  # 'l' "Hello, World" [ - 3 ]  # 'r'
# Пример в Raku "Hello, World" . substr ( 1 , 1 ); # 'e'
'Пример в Visual Basic Mid ( "Hello, World" , 2 , 1 )
'Пример в Visual Basic .NET «Hello, World» . Символы ( 2 )  '"l" c
«Пример на Smalltalk» «Hello, World» по  адресу:  2 .  "$ e"
// Пример на Rust "Hello, World" . символы (). nth ( 2 ); // Некоторые ('l') 

Сравнить (целочисленный результат) [ править ]

# Пример в Perl 5 "hello"  cmp  "world" ;  # возвращает -1
# Пример в Python cmp ( "hello" ,  "world" )  # возвращает -1
# Примеры в Raku "hello"  cmp  "world" ; # возвращает Less "world"  cmp  "hello" ; # возвращает больше "hello"  cmp  "hello" ; # возвращает То же
/ ** Пример в Rexx * / compare ( "hello" , "world" ) / * возвращает индекс несоответствия: 1 * /   
; Пример на схеме ( use-modules  ( srfi  srfi-13 )) ; возвращает индекс несоответствия: 0 ( строковое сравнение  "привет"  "мир"  значения  значения  значения )

Сравнить (на основе реляционных операторов, логический результат) [ править ]

% Пример в Erlang «привет»  >  «мир» .  % возвращает false
# Пример в Raku "art"  gt  "painting" ; # возвращает False "art"  lt  "painting" ; # возвращает True
# Пример в Windows PowerShell "hello"  -gt  "world"  # возвращает false
;; Пример в Common Lisp ( строка>  "искусство"  "рисование" )  ; возвращает nil ( string <  "art"  "painting" )  ; возвращает не ноль

Конкатенация [ править ]

{Пример на Паскале} 'abc'  +  'def' ;  // возвращает "abcdef"
// Пример на C # "abc"  +  "def" ;  // возвращает "abcdef"
'Пример в Visual Basic «abc»  &  «def»  ' возвращает «abcdef» «abc»  +  «def»  'возвращает «abcdef» «abc»  &  Null  ' возвращает «abc» «abc»  +  Null  'возвращает Null
// Пример в D "abc"  ~  "def" ;  // возвращает "abcdef"
;; Общий пример lisp ( concatenate  'string  "abc"  "def"  "ghi" )  ; возвращает "abc def ghi"
# Пример в Perl 5 "abc"  ~  "def" ;  # возвращает "abcdef" "Perl"  ~  5 ;  # возвращает "Perl 5"
# Пример в Raku "abc" ~ "def" ; # возвращает "abcdef" "Perl" ~ 6 ; # возвращает "Раку"

Содержит [ править ]

¢ Пример на АЛГОЛЕ 68 ¢строка в строке ("e", loc int , "Hello mate"); ¢ возвращает истину ¢строка в строке ("z", loc int , "word"); ¢ возвращает false ¢
// Пример на C # «Привет, дружище» . Содержит ( «е» );  // возвращает истинное "слово" . Содержит ( "z" );  // возвращает false
# Пример в Python "e"  в  "Hello mate"  # возвращает true "z"  в  "word"  # возвращает false
# Пример в Раку "Доброе утро!" . contains ( 'z' ) # возвращает False "¡Buenos días!" . содержит ( 'í' ); # возвращает True
«Пример на Smalltalk» 'Hello mate'  includesSubstring:  'e'  "возвращает true" ' word '  includesSubstring:  'z'  "возвращает false"

Равенство [ править ]

Проверяет, равны ли две строки. См. Также #Compare и #Compare . Обратите внимание, что выполнение проверок равенства с помощью универсального метода сравнения с целочисленным результатом не только сбивает с толку программиста, но часто является значительно более дорогой операцией; это особенно верно при использовании « C-струн ».

// Пример на C # "hello"  ==  "world"  // возвращает false
'Пример в Visual Basic "hello"  =  "world"  ' возвращает false
# Примеры в Perl 5 'hello'  eq  'world'  # возвращает 0 'hello'  eq  'hello'  # возвращает 1
# Примеры в Raku 'hello'  eq  'world'  # возвращает False 'hello'  eq  'hello'  # возвращает True
# Пример в Windows PowerShell "hello"  -eq  "world"  # возвращает false
⍝ Пример в APL 'hello'   'world'  ⍝ возвращает 0


Найдите [ редактировать ]

; Примеры в Common Lisp ( ищите  "e"  "Hello mate" )  ; возвращает 1 ( поиск  «z»  «слово» )  ; возвращает NIL
// Примеры на C # "Hello mate" . IndexOf ( «е» );  // возвращает 1 «Привет, дружище» . IndexOf ( «е» ,  4 );  // возвращает 9 "слово" . IndexOf ( "z" );  // возвращает -1
# Примеры в раку "Привет!" . index ( 'e' ) # возвращает 1 "Здравствуйте!" . index ( 'z' ) # возвращает Nil
; Примеры на схеме ( use-modules  ( srfi  srfi-13 )) ( string-contains  «Hello mate»  «e» )  ; возвращает 1 ( строка содержит  "слово"  "z" )  ; возвращает #f
«Примеры в Visual Basic InStr ( « Hello mate » ,  « e » )  » возвращает 2 InStr ( 5 ,  «Hello mate» ,  «e» )  »возвращает 10 InStr ( « word » ,  « z » )  » возвращает 0
«Примеры в Smalltalk» 'Hello mate'  indexOfSubCollection: 'ate'  "возвращает 8" ' Hello  mate '  indexOfSubCollection: 'late'  "возвращает 0" I ' Hello  mate '  indexOfSubCollection: 'late'  ifAbsent: [ 99 ] "возвращает 99" ' Hello  mate '  indexOfSubCollection: 'late'  ifAbsent: [ собственная  ошибка ] "вызывает исключение"


Найти персонажа [ править ]

// Примеры на C # "Hello mate" . IndexOf ( 'е' );  // возвращает 1 «слово» . IndexOf ( 'z' )  // возвращает -1
; Примеры в Common Lisp ( позиция  # \ e  "Привет, дружище" )  ; возвращает 1 ( позиция  # \ z  "слово" )  ; возвращает NIL

^ a Для данного набора символов SCAN возвращает позицию первого найденного символа [17], а VERIFY возвращает позицию первого символа, который не принадлежит набору. [18]

Форматировать [ редактировать ]

// Пример в C # String . Формат ( «Мои {0} затраты {1: C2}» ,  «ручка» ,  19,99 );  // возвращает "Моя ручка стоит 19,99 доллара"
// Пример в формате Object Pascal (Delphi) ( 'Мой% s стоит $% 2f' ,  [ 'pen' ,  1 9,99 ]) ;  // возвращает "Моя ручка стоит 19,99 доллара"
// Пример в Java String . формат ( «Мой% s стоит $% 2f» ,  «ручка» ,  19,99 );  // возвращает "Моя ручка стоит 19,99 доллара"
# Примеры в Raku sprintf  "My% s cost \ $%. 2f" , "pen" , 19,99 ; # возвращает "Моя ручка стоит 19,99 доллара" 1 . fmt ( "% 04d" ); # возвращает "0001"
# Пример на Python "Мой % s стоит $ % .2f "  %  ( "pen" ,  19,99 );  # возвращает «Моя ручка стоит 19,99 долларов США» «Моя {0} стоит {1: .2f} долларов США » . формат ( «ручка» ,  19,99 );  # возвращает "Моя ручка стоит 19,99 доллара"
; Пример на схеме ( формат  «My ~ a стоит ~ 1,2F»,  «ручка»  19,99 )  ; возвращает "Моя ручка стоит 19,99 доллара"
/ * пример в PL / I * /положить строку (some_string) edit ('My', 'pen', 'cost', 19.99) (a, a, a, p '$$$ V.99')/ * возвращает «Моя ручка стоит 19,99 долларов США» * /

Неравенство [ править ]

Проверяет, не равны ли две строки. См. Также # Равенство .

// Пример на C # "hello"  ! =  "World"  // возвращает true
'Пример в Visual Basic "hello"  <>  "world"  ' возвращает значение true
;; Пример на Clojure ( not = "hello"  "world" )  ; ⇒ верно
# Пример в Perl 5 'hello'  ne  'world'  # возвращает 1
# Пример в Raku 'hello'  ne  'world'  # возвращает True
# Пример в Windows PowerShell "hello"  -ne  "world"  # возвращает true

индекс [ править ]

см. # Найти

indexof [ править ]

см. # Найти

instr [ править ]

см. # Найти

instrrev [ править ]

см. #rfind

присоединиться [ редактировать ]

// Пример в C # String . Join ( "-" ,  { "a" ,  "b" ,  "c" })  // "abc"
"Пример на Smalltalk" # ( 'a'  'b'  'c' )  joinUsing:  '-'  "'abc'"
# Пример в Perl 5 join (  '-' ,  ( 'a' ,  'b' ,  'c' ));  # 'ab-c'
# Пример в Raku <ab c> . присоединиться ( '-' ); # 'ab-c'
# Пример на Python "-" . join ([ "a" ,  "b" ,  "c" ])  # 'ab-c'
# Пример на Ruby [ "a" ,  "b" ,  "c" ]. присоединиться ( "-" )  # 'ab-c'
; Пример на схеме ( use-modules  ( srfi  srfi-13 )) ( string-join  ' ( "a"  "b"  "c" )  "-" )  ; "abc"

lastindexof [ править ]

см. #rfind

осталось [ редактировать ]

# Пример на языке Raku "Привет, там!" . substr ( 0 , 6 ); # возвращает "Привет,"
/ * Примеры в Rexx * /left ( "abcde" , 3 ) / * возвращает "abc" * /  left ( "abcde" , 8 ) / * возвращает "abcde" * /  left ( "abcde" , 8 , "*" ) / * возвращает "abcde ***" * /   
; Примеры на схеме ( use-modules  ( srfi  srfi-13 )) ( string-take  "abcde" ,  3 )  ; возвращает «abc» ( взятие строки  «abcde» ,  8 )  ; ошибка
'  Примеры  в  Visual  Basic Left ( "sandroguidi" ,  3 )  '  возвращает  "san"  Left ( "sandroguidi" ,  100 )  '  возвращает  "sandroguidi"
// Примеры в Ya "abcde" [ 0..3 ]  // возвращает "abc" "abcde" [ 0..8 ]  // возвращает "abcde"


len [ править ]

см. #length


длина [ править ]

// Примеры на C # "привет" . Длина ;  // возвращает 5 "" . Длина ;  // возвращает 0
#  Примеры  в  строке Erlang : len ( "привет" ). % возвращает 5 строк : len ( "" ). % возвращает 0  
# Примеры в Perl 5 length ( "привет" );  # возвращает 5 length ( "" );  # возвращает 0
# Примеры в раку "🏳️‍🌈" . символы ; символы  «🏳️‍🌈» ; # оба возвращают 1 "🏳️‍🌈" . коды ; коды  «🏳️‍🌈» ; # оба возвращают 4 "" . символы ; символы  "" ; # оба возвращают 0 "" . коды ; коды  "" ; # оба возвращают 0
'Примеры в Visual Basic Len ( "hello" )  ' возвращает 5 Len ( "" )  'возвращает 0
// Примеры в Objective-C [ @ "hello"  Length ]  // возвращает 5 [ @ ""  Length ]  // возвращает 0
- Примеры в Lua ( "привет" ): len ()  - возвращает 5 # ""  - возвращает 0

найти [ редактировать ]

см. # Найти


Строчные [ править ]

// Пример на C # "Wiki значит быстро?" . ToLower ();  // "вики значит быстро?"
; Пример на схеме ( use-modules  ( srfi  srfi-13 )) ( строка-вниз  «Wiki значит быстро?» )  ; "вики значит быстро?"
/ * Пример на C * / #include  <ctype.h>#include  <stdio.h>int  main ( void )  {  char  string []  =  "Wiki значит быстро?" ;  int  i ;  for  ( i  =  0 ;  i  <  sizeof ( string )  -  1 ;  ++ i )  {  / * преобразовать символы на месте, один за другим * /  string [ i ]  =  tolower ( string [ i ]);  }  put ( строка ); / * "вики значит быстро?" * /  return  0 ; }
# Пример в Raku "Вики значит быстро?" . lc ; # "вики значит быстро?"


середина [ править ]

см. #substring


раздел [ править ]

# Примеры в Python "Спам-яйца, спам, спам и ветчина" . partition ( 'спам' )  # ('Спам-яйца', 'спам', 'спам и ветчина') «Спам-яйца, спам, спам и ветчина» . partition ( 'X' )  # ('Спам-яйца, спам, спам и ветчина', "", "")
# Примеры в Perl 5 / Raku split  / (спам) / ,  «Спам-яйца, спам и ветчина»  , 2 ;  # ('Спам-яйца', 'спам', 'спам и ветчина'); split  / (X) / ,  «Спам, яйца, спам, спам и ветчина»  , 2 ;  # ('Спам-яйца, спам, спам и ветчина');


заменить [ редактировать ]

// Примеры на C # "effffff" . Заменить ( «ф» ,  «прыжок» );  // возвращает «ejumpjumpjumpjumpjumpjump» «бла» . Заменить ( "z" ,  "y" );  // возвращает "бла"
// Примеры на Java "effffff" . replace ( «ф» ,  «прыжок» );  // возвращает «ejumpjumpjumpjumpjumpjump» «effffff» . replaceAll ( "е *" ,  "прыгать" );  // возвращает "ejump"
// Примеры  на  раку "effffff" . субст ( "F" , "скачок" ,: г ); # возвращает "ejumpjumpjumpjumpjumpjump" "blah" . субст ( "г" , "у" ,: г ); # возвращает "бла"
"Примеры в Visual Basic Replace ( " effffff " ,  " f " ,  " jump " )  " возвращает "ejumpjumpjumpjumpjumpjump" Replace ( "blah" ,  "z" ,  "y" )  'возвращает "blah"
# Примеры в Windows PowerShell «effffff»  -replace  «f» ,  «jump»  # возвращает «ejumpjumpjumpjumpjumpjump» «effffff»  -replace  «f *» ,  «jump»  # возвращает «ejump»

обратный [ править ]

"Пример на Smalltalk" 'hello' в  обратном порядке  "возвращает 'olleh'"
# Пример в Perl 5 обратное  "hello"  # возвращает "olleh"
# Пример в Raku "привет" . flip  # возвращает "olleh"
# Пример в Python "hello" [:: - 1 ]  # возвращает "olleh"
; Пример на схеме ( use-modules  ( srfi  srfi-13 )) ( обратная строка  "привет" )  ; возвращает "olleh"

rfind [ править ]

; Примеры в Common Lisp ( ищите  "e",  "Hello mate"  : from-end  t )  ; возвращает 9 ( поиск  "z"  "word"  : from-end  t )  ; возвращает NIL
// Примеры на C # "Hello mate" . LastIndexOf ( "е" );  // возвращает 9 «Привет, дружище» . LastIndexOf ( "е" ,  4 );  // возвращает 1 «слово» . LastIndexOf ( "z" );  // возвращает -1
# Примеры в Perl 5 rindex ( "Hello mate" ,  "e" );  # возвращает 9 rindex ( "Привет, дружище " ,  "е" ,  4 );  # возвращает 1 rindex ( "слово" ,  "z" );  # возвращает -1
# Примеры в Raku "Hello mate" . rindex ( «е» ); # возвращает 9 «Привет, дружище» . rindex ( «е» , 4 ); # возвращает 1 "слово" . rindex ( 'z' ); # возвращает Nil
«Примеры в Visual Basic InStrRev ( « Hello mate » ,  « e » )  » возвращает 10 InStrRev ( 5 ,  «Hello mate» ,  «e» )  »возвращает 2 InStrRev ( « word » ,  « z » )  » возвращает 0


право [ править ]

// Примеры на Java; извлечь 4 крайних правых символа String  str  =  "CarDoor" ; ул . подстрока ( str . length () - 4 );  // возвращает 'Door'
# Примеры в Raku "abcde" . substr (* - 3 ); # возвращает "cde" "abcde" . substr (* - 8 ); # ошибка "вне допустимого диапазона"
/ * Примеры в Rexx * /right ( "abcde" , 3 ) / * возвращает "cde" * /  right ( "abcde" , 8 ) / * возвращает "abcde" * /  right ( "abcde" , 8 , "*" ) / * возвращает "*** abcde" * /   
; Примеры на схеме ( use-modules  ( srfi  srfi-13 )) ( string-take-right  "abcde" ,  3 )  ; возвращает «cde» ( строка-вправо  «abcde» ,  8 )  ; ошибка
'Примеры в Visual Basic Right ( "sandroguidi" ,  3 )  ' возвращает "idi" Right ( "sandroguidi" ,  100 )  'возвращает "sandroguidi"


rpartition [ править ]

# Примеры в Python "Спам-яйца, спам, спам и ветчина" . rpartition ( 'spam' )  ### ('Спам-яйца, спам', 'спам', 'и ветчина') «Спам-яйца, спам, спам и ветчина» . rpartition ( 'X' )  ### ("", "", 'Спам-яйца, спам и ветчина')

ломтик [ править ]

см. #substring


разделить [ править ]

// Пример на C # "abc, defgh, ijk" . Разделить ( ',' );  // {"abc", "defgh", "ijk"} "abc, defgh; ijk" . Разделить ( ',' ,  ';' );  // {"abc", "defgh", "ijk"}
% Пример в строке Erlang : tokens ( "abc; defgh; ijk" ,  ";" ).  % ["abc", "defgh", "ijk"]
// Примеры на Java "abc, defgh, ijk" . split ( "," );  // {"abc", "defgh", "ijk"} "abc, defgh; ijk" . split ( ", |;" );  // {"abc", "defgh", "ijk"}
{Пример на Паскале} var  lStrings :  TStringList ;  lStr :  строка ; начало  lStrings  : =  TStringList . Создать ;  lStrings . Разделитель  : =  ',' ;  lStrings . DelimitedText  : =  'abc, defgh, ijk' ;  lStr  : =  lStrings . Строки [ 0 ] ;  // 'abc'  lStr  : =  lStrings . Струны [ 1 ] ; // 'defgh'  lStr  : =  lStrings . Струны [ 2 ] ;  // 'ijk' end ;
# Примеры в Perl 5 split ( / spam / ,  'Спам-яйца, спам и ветчина' );  # ('Спам-яйца', '', 'и ветчина') split ( / X / ,  'Спам-яйца, спам и ветчина' );  # ('Спам-яйца, спам, спам и ветчина')
# Примеры в Raku «Спам-яйца, спам и ветчина» . разделить ( / спам / ); # (Спам-яйца и ветчина) разделить ( / X / , 'Спам-яйца, спам и ветчина' ); # (Спам-яйца, спам, спам и ветчина)


sprintf [ править ]

см. #Format

полоса [ править ]

см. #trim


strcmp [ править ]

см. #Compare (целочисленный результат)


подстрока [ править ]

// Примеры на C # "abc" . Substring ( 1 ,  1 ):  // возвращает «b» «abc» . Подстрока ( 1 ,  2 );  // возвращает «bc» «abc» . Подстрока ( 1 ,  6 );  // ошибка
;; Примеры в Common Lisp ( подзапрос  «abc»  1  2 )  ; возвращает «b» ( подзапрос  «abc»  2 )  ; возвращает "c"
% Примеры в строке Erlang : substr ( "abc" ,  2 ,  1 ).  % возвращает строку "b" : substr ( "abc" ,  2 ).  % возвращает "bc"
# Примеры в Perl 5 substr ( "abc" ,  1 ,  1 );  # возвращает "b" substr ( "abc" ,  1 );  # возвращает "bc"
# Примеры в раку "abc" . substr ( 1 , 1 ); # возвращает "b" "abc" . substr ( 1 ); # возвращает "bc"
# Примеры в Python «abc» [ 1 : 2 ]  # возвращает «b» «abc» [ 1 : 3 ]  # возвращает «bc»
/ * Примеры в Rexx * /substr ( "abc" , 2 , 1 ) / * возвращает "b" * /   substr ( "abc" , 2 ) / * возвращает "bc" * /  substr ( "abc" , 2 , 6 ) / * возвращает "bc" * /   substr ( "abc" , 2 , 6 , "*" ) / * возвращает "bc ****" * /    


Заглавные [ править ]

// Пример на C # "Wiki значит быстро?" . ToUpper ();  // "WIKI ЗНАЧИТ БЫСТРЫЙ?"
# Пример в Perl 5 uc ( "Wiki значит быстро?" );  # "WIKI ЗНАЧИТ БЫСТРЫЙ?"
# Пример в Raku uc ( "Wiki значит быстро?" ); # "WIKI ЗНАЧИТ БЫСТРЫЙ?" "Вики значит быстро?" . uc ; # "WIKI ЗНАЧИТ БЫСТРЫЙ?"
/ * Пример в Rexx * /translate ( "Wiki значит быстро?" ) / * "WIKI MEANS FAST?" * / / * Пример # 2 * /A = 'Это пример.'ВЕРХНИЙ  A / * «ЭТО ПРИМЕР». * / / * Пример # 3 * /A = 'верхнее использование функции перевода'.Перевести  UPPER  VAR  A  Z / * Z = "UPPER, ИСПОЛЬЗУЯ ФУНКЦИЮ ПЕРЕВОДА." * / 
; Пример на схеме ( use-modules  ( srfi  srfi-13 )) ( строка-  вверх case "Wiki означает быстро?" )  ; "WIKI ЗНАЧИТ БЫСТРЫЙ?"
'Пример в Visual Basic UCase ( «Wiki значит быстро?» )  «WIKI MEANS FAST?»

обрезать [ править ]

trimили stripиспользуется для удаления пробелов в начале, конце или как в начале, так и в конце строки.

Другие языки

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

APL [ править ]

APL может напрямую использовать регулярные выражения:

Обрезать '^ + | + $ ' ⎕R '

В качестве альтернативы функциональный подход, сочетающий логические маски, которые отфильтровывают начальные и конечные пробелы:

Обрезать { / ⍨ ( \ ⌽∨ \ ∘ ) '' }

Или переверните и удалите ведущие пробелы дважды:

Обрезать { ( \ '' ) / } 2

AWK [ править ]

В AWK можно использовать регулярные выражения для обрезки:

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

или же:

 функция  ltrim ( s )  {  sub ( / ^ [\ t] + / ,  "" ,  s );  return  s  }  функция  rtrim ( s )  {  sub ( / [\ t] + $ / ,  "" ,  s );  return  s  }  функция  trim ( s )  {  return  rtrim ( ltrim ( s ));  }

C / C ++ [ править ]

В C или C ++ нет стандартной функции обрезки. Большинство доступных строковых библиотек [52] для C содержат код, реализующий усечение, или функции, которые значительно упрощают эффективную реализацию. В некоторых нестандартных библиотеках C функция также часто называется EatWhitespace .

В C программисты часто комбинируют ltrim и rtrim для реализации обрезки:

#include  <string.h>#include  <ctype.h>void  rtrim ( char  * str ) {  char  * s ;  s  =  str  +  strlen ( str );  while  ( - s  > =  str )  {  если  ( ! isspace ( * s ))  перерыв ;  * s  =  0 ;  } }void  ltrim ( char  * str ) {  size_t  n ;  п  =  0 ; в  то время как  ( ул [ п ]  =!  '\ 0'  &&  isspace (( неподписанные  символ )  ул [ п ]))  {  п ++ ;  }  memmove ( str ,  str  +  n ,  strlen ( str )  -  n  +  1 ); }пустая  обрезка ( char  * str ) {  rtrim ( str );  ltrim ( str ); }

У библиотеки C ++ с открытым исходным кодом Boost есть несколько вариантов обрезки, включая стандартный: [53]

#include  <повышение / алгоритм / строка / trim.hpp>обрезается  =  подталкивание :: Алгоритм :: trim_copy ( "строка" );

Обратите внимание, что с функцией boost, называемой просто, trimвходная последовательность изменяется на месте и не возвращает результат.

Другая библиотека C ++ с открытым исходным кодом Qt имеет несколько вариантов обрезки, включая стандартный: [54]

#include  <QString>обрезано  =  с . обрезанный ();

Linux ядро также включает в себя функцию полосы, strstrip(), так как 2.6.18-rc1, который урезает строку «на месте». Начиная с версии 2.6.33-rc1, ядро ​​использует strim()вместо, strstrip()чтобы избежать ложных предупреждений. [55]

Haskell [ править ]

Алгоритм обрезки в Haskell :

 import  Data.Char  ( isSpace )  trim  ::  String  ->  String  trim  =  f  .  f,  где  f  =  обратный  .  dropWhile  isSpace

можно интерпретировать следующим образом: f удаляет предыдущий пробел и меняет строку. Затем f снова применяется к собственному выходу. Обратите внимание, что подпись типа (вторая строка) не является обязательной.

J [ править ]

Алгоритм обрезки в J - это функциональное описание:

 обрезать  =.  # ~  [:  ( +. / \  *.  +. / \. )  '' & ~:

То есть: filter ( #~) для непробельных символов ( ' '&~:) между ведущими ( +./\) и ( *.) конечными ( +./\.) пробелами.

JavaScript [ править ]

В JavaScript 1.8.1 (Firefox 3.5 и новее) и в стандарте ECMAScript 5 есть встроенная функция обрезки. В более ранних версиях его можно было добавить в прототип объекта String следующим образом:

Строка . прототип . trim  =  function ()  {  верните  это . заменить ( / ^ \ s + / g ,  "" ). заменить ( / \ s + $ / g ,  "" ); };

Perl [ править ]

Perl 5 не имеет встроенной функции обрезки. Однако функциональность обычно достигается с помощью регулярных выражений .

Пример:

$ строка  = ~  s / ^ \ s + // ;  # удалить начальные пробелы $ string  = ~  s / \ s + $ // ;  # удалить завершающие пробелы

или же:

$ строка  = ~  s / ^ \ s + | \ s + $ // g  ;  # удаляем начальные и конечные пробелы

Эти примеры изменяют значение исходной переменной $string.

Для Perl также является StripLTSpace в String::Stripиз CPAN .

Есть, однако, две функции, которые обычно используются , чтобы лишить пробельные символы конца строки, chompа chop:

  • chop удаляет последний символ из строки и возвращает его.
  • chompудаляет завершающие символы новой строки из строки, если они есть. (То, что составляет новую строку, зависит от $ INPUT_RECORD_SEPARATOR ).

В Raku , родственном языке Perl, у строк есть trimметод.

Пример:

$ строка = $ строка . обрезать ; # удалить начальные и конечные пробелы $ string . = trim ; # то же самое

Tcl [ править ]

Tcl string команда имеет три соответствующих подкомандами: trim, trimrightи trimleft. Для каждой из этих команд может быть указан дополнительный аргумент: строка, представляющая набор удаляемых символов - по умолчанию используется пробел (пробел, табуляция, новая строка, возврат каретки).

Пример обрезки гласных:

набор строки звукоподражания набора отделаны [ строка декоративных $ строки AEIOU ]  ; # результатом будет nomatop set r_trimmed [ string trimright $ string aeiou ]  ; # результат - onomatop set l_trimmed [ string trimleft $ string aeiou ]  ; # результат - номатопея

XSLT [ править ]

XSLT включает функцию, которая удаляет начальные и конечные пробелы, в дополнение к замене любой последовательности пробелов (включая разрывы строк) одним пробелом.normalize-space(string)

Пример:

<xsl: variable  name = 'trimmed' >  <xsl: value-of  select = 'normalize-space (string)' /> </ xsl: variable>

XSLT 2.0 включает регулярные выражения, предоставляя еще один механизм для обрезки строк.

Другой метод XSLT для обрезки - использование функции XPath 2.0 substring().

Ссылки [ править ]

  1. ^ a b c d e индекс может быть отрицательным, что в таком случае указывает количество разрядов перед концом строки.
  2. ^ В Ruststr::charsметод перебирает кодовые точки, аstd::iter::Iterator::nthметод на итераторах возвращает n-е значение с нулевым индексом из итератора, илиNone.
  3. ^ индекс не можетбыть отрицательным, используйте * -N, где N указывает количество мест до конца строки.
  4. ^ возвращает МЕНЬШЕ, РАВНО или БОЛЬШЕ
  5. ^ возвращает LT, EQ или GT
  6. ^ возвращает.TRUE.или.FALSE.. Эти функции основаны на последовательности сортировки ASCII.
  7. ^ a b Расширение IBM.
  8. ^ В Русте, тоOrd::cmpметод на строке возвращаетOrdering:Less,Equal, илиGreater.
  9. ^ Б с д е е ржавчины, операторов ==и !=и методов eq, neкоторые реализованы с помощью PartialEqпризнака, а операторы <, >, <=, >=и метод lt, gt, le, geреализуется с помощью PartialOrdпризнака.
  10. ^ Операторы используют последовательность сортировки компилятора по умолчанию.
  11. ^ модифицирует, в котором должно быть достаточно места для хранения результатаstring1
  12. ^ В Rust+оператор реализованAddтрейтом.
  13. ^ См.str::containsМетод.
  14. ^ a b startpos - это расширение IBM.
  15. ^ a b См. str::findметод.
  16. ^ startpos - расширение IBM.
  17. ^ "сканировать в Fortran Wiki" . Fortranwiki.org. 2009-04-30 . Проверено 18 августа 2013 .
  18. ^ "проверить в Fortran Wiki" . Fortranwiki.org. 2012-05-03 . Проверено 18 августа 2013 .
  19. ^ formatstring должен быть фиксированным литералом во время компиляции, чтобы иметь правильный тип.
  20. ^ См.std::format, Который импортируется прелюдией Rust,чтобы его можно было использовать под именемformat.
  21. ^ См.slice::joinМетод.
  22. ^ если n больше, чем длина строки, то в режиме отладки создается исключение ArrayRangeException, в режиме выпуска поведение не определено .
  23. ^ если n больше длины строки, Java выдаст исключение IndexOutOfBoundsException
  24. ^ a b, если n больше длины строки, вызывает Invalid_argument
  25. ^ a b, если n больше длины строки, вывести сообщение "StringTake :: take:"
  26. ^ a b c В Rust строки индексируются с точки зрения байтовых смещений, и во время выполнения возникает паника, если индекс выходит за границы или если это приведет к недопустимому UTF-8 . &str(Строка ссылка) может быть индексированы различными типами диапазонов, в том числе Range( 0..n), RangeFrom( n..) и RangeTo( ..n) , потому что они все реализации SliceIndexпризнака с strтого типа индексируется. Этот str::getметод не вызывает паники при индексировании. Он возвращается Noneв тех случаях, когда при индексации возникает паника.
  27. ^ Ruby не поддерживает Unicode
  28. ^ См.str::lenМетод.
  29. ^ В Ruststr::charsметод выполняет итерацию по кодовым точкам, аstd::iter::Iterator::countметод на итераторах использует итератор и возвращает общее количество элементов в итераторе.
  30. ^ работает с одним символом
  31. ^ Б функция существует в пространстве имен. Вы должны включить файл заголовка, чтобы использовать его. Функции и находятся в глобальном пространстве имен, полученном из файла заголовка. В и именах перегружены и не могут быть переданы без броска , чтобы разрешить функцию перегрузки двусмысленности, например ,transformstd::<algorithm>tolowertoupper<ctype.h>std::tolowerstd::toupperstd::transformstd::transform(string.begin(), string.end(), result.begin(), (int (*)(int))std::tolower);
  32. Только ^std::string результат сохраняется в строке,resultкоторая не меньше длиныstring, и может быть, а может и не бытьstringсамим собой
  33. ^ a b только символы ASCII, поскольку Ruby не поддерживает Unicode
  34. ^ См.str::to_lowercaseМетод.
  35. ^ См.str::replaceМетод.
  36. ^ a b c d e Строка "find" в этой конструкции интерпретируется как регулярное выражение . Некоторые символы имеют особое значение в регулярных выражениях. Если вы хотите найти строку буквально, вам нужно заключить в кавычки специальные символы.
  37. ^ третий параметр нестандартный
  38. ^ В Ruststr::charsметод выполняет итерацию по кодовым точкам,std::iter::Iterator::revметод на обратимых итераторах (std::iter::DoubleEndedIterator) создает обратный итератор, аstd::iter::Iterator::collectметод использует итератор и создает коллекцию (которая здесь указана как aStringссинтаксисом turbofish ) из элементов итератора.
  39. ^ См.str::rfindМетод.
  40. ^ "Аннотированный ES5" . Es5.github.com . Проверено 18 августа 2013 .
  41. ^ если n больше длины строки, то в режиме отладки выдается исключение ArrayRangeException и неопределенное поведение в режиме выпуска
  42. ^ Смstr::splitиstr::rsplitметоды.
  43. ^ a b c d e f g startpos может быть отрицательным, что указывает на то, что количество мест должно начинаться до конца строки.
  44. ^ a b numChars может быть отрицательным, что указывает на то, что количество разрядов должно заканчиваться до конца строки.
  45. ^ неstartpos можетбыть отрицательным, используйте * - startpos, чтобы указать, что количество разрядов должно начинаться до конца строки.
  46. ^ неnumChars можетбыть отрицательным, используйте * - numChars, чтобы указать, чтобы закончить это количество мест перед концом строки.
  47. ^ a b c d e endpos может быть отрицательным, что указывает на то, что количество разрядов должно заканчиваться до конца строки.
  48. Только ^std::string , результат сохраняется в строковом результате, длина которого не меньше длины строки , и может быть, а может и не бытьсамой строкой
  49. ^ В Ruststr::to_uppercaseметод возвращает вновь выделенный объект, вStringкотором все символы нижнего регистра заменены на символы верхнего регистра в соответствии с правилами Unicode.
  50. ^ В Ruststr::trimметод возвращает ссылку на оригинал&str.
  51. ^ "Обрезка - приручник GNU Pascal" . Gnu-pascal.de . Проверено 24 августа 2013 .
  52. ^ "Сравнение строковых библиотек" . And.org . Проверено 24 августа 2013 .
  53. ^ «Использование - 1.54.0» . Boost.org. 2013-05-22 . Проверено 24 августа 2013 .
  54. ^ [1] Архивировано 2 августа 2009 года в Wayback Machine.
  55. ^ dankamongmen. "sprezzos-kernel-Packing / changelog at master · dankamongmen / sprezzos-kernel-packages · GitHub" . Github.com . Проверено 29 мая 2016 .