Ruby Strings

Объект String в Ruby содержит и управляет произвольной последовательностью из одного или нескольких байтов, обычно представляющих символы, представляющие человеческий язык.

Простейшие строковые литералы заключаются в одинарные кавычки (символ апострофа). Текст в кавычках - это значение строки:

'Это простой строковый литерал Ruby'

Если вам нужно поместить апостроф в строковый литерал, заключенный в одинарные кавычки, поставьте перед ним обратную косую черту, чтобы интерпретатор Ruby не подумал, что он завершает строку:

'Разве вы не читали книгу О \ 'Relly\ 's?'

Обратная косая черта также позволяет избежать другой обратной косой черты, так что вторая обратная косая черта сама по себе не интерпретируется как escape-символ.

Ниже приведены функции Ruby, связанные со строками.

Замена выражения (Expression Substitution):

Подстановка выражений - это способ встраивания значения любого выражения Ruby в строку с помощью # {and}:

#!/usr/bin/ruby

​​x, y, z = 12, 36, 72

puts "Значение x равно #{ x }."

puts "Сумма x и y равна #{ x + y }."

puts "Среднее значение было #{ (x + y + z) / 3 }."

Это даст следующий результат:

Значение x равно 12.

Сумма x и y составляет 48.

Среднее значение было 40.

Общие строки с разделителями (General Delimited Strings):

С помощью общих строк с разделителями вы можете создавать строки внутри пары совпадающих символов с произвольными разделителями, например, !, (, {, <, и т.д., Которым предшествует символ процента (%). Q, q и x имеют особое значение . Общие строки с разделителями могут быть

% {Ruby is fun.} эквивалентно "Ruby is fun."

% Q { Ruby is fun. } эквивалентно выражению " Ruby is fun. "

% q [ Ruby is fun. ] эквивалентно строке в одинарных кавычках

%x! ls ! эквивалент вывода команды "back tick" `ls`

Escape Characters:

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

ПРИМЕЧАНИЕ: В строке, заключенной в двойные кавычки, интерпретируется escape-символ; в строке, заключенной в одинарные кавычки, сохраняется escape-символ.


Backslash notation Hexadecimal character Description
\a 0x07 Bell или alert \b 0x08 Backspace \cx Control-x \C-x Control-x \e 0x1b Escape \f 0x0c Formfeed \M-\ C-x Meta-Control-x \n 0x0a Newline \nnn Восьмеричное обозначение, где n находится в диапазоне 0,7 \r 0x0d Carriage return\s 0x20 Space \t 0x09 Tab \v 0x0b Вертикальная табуляция \x Символ x \xnn Шестнадцатеричное представление, где n находится в диапазоне 0,9, af или AF

Кодировка символов (Character Encoding):

Набор символов по умолчанию для Ruby - ASCII, символы которого могут быть представлены одиночными байтами. Если вы используете UTF-8 или другой современный набор символов, символы могут быть представлены от одного до четырех байтов.

Вы можете изменить свой набор символов, используя $KCODE в начале вашей программы, например:

$ KCODE = 'u'

Ниже приведены возможные значения для $KCODE.

Code Descriptiona

a ASCII (то же, что none). Это значение по умолчанию.

e EUC.

n None (то же, что и ASCII).

u UTF-8.

Встроенные строковые методы (String Built-in Method):

Нам нужен экземпляр объекта string для вызова метода String. Ниже приведен способ создания экземпляра объекта String:

new [String.new (str = "")]

Это вернет новый строковый объект, содержащий копию str. Теперь, используя объект str, мы можем использовать все доступные методы экземпляра. Например:

#!/usr/bin/ruby

​​myStr = String.new("ЭТО ТЕСТ")

foo = myStr.downcase

puts "#{foo}"

Это даст следующий результат:

это тест

Ниже приведены общедоступные методы String (при условии, что str является объектом String):


SN Методы с описанием1 str% argФорматирует строку, используя спецификацию формата. arg должен быть массивом, если он содержит более одной замены. Для получения информации о спецификации формата. см. sprintf в разделе «Модуль ядра». 2 str * integerВозвращает новую строку, содержащую целое число, умноженное на str. Другими словами, str повторяется целое число imes.3 str + other_strОбъединяет(concatenates) other_str в str.4 str << objПрисоединяет (concatenates) объект к str. Если объект является Fixnum в диапазоне 0,255, он преобразуется в символ. Сравните это с concat.5 str <=> other_strСравнивает str с other_str, возвращая -1 (меньше), 0 (равно) или 1 (больше). При сравнении учитывается регистр. 6 str == objПроверяет str и obj на равенство. Если obj не является String, возвращает false; возвращает истину, если str <=> obj возвращает 0.7 str = ~ objСопоставляет str с шаблоном регулярного выражения obj. Возвращает позицию начала матча; в противном случае false. 8 str = ~ objСопоставляет str с шаблоном регулярного выражения obj. Возвращает позицию начала матча; в противном случае false.9 str.capitalizeДелает строку с заглавной буквы. 10 str.capitalize! То же, что и capitalize, но изменения вносятся на месте. 11 str.casecmpВыполняет сравнение строк без учета регистра. 12 str.centerЦентрирует строку. 13 str.chompУдаляет разделитель записей ($/), обычно \n, из конца строки. Если разделитель записей не существует, ничего не делает. 14 str.chomp!То же, что и chomp, но изменения вносятся на месте.15 str.chopУдаляет последний символ из str.16 str.chop!То же, что и chop, но изменения вносятся на месте. 17 str.concat (other_str)Объединяет other_str в str.18 str.count (str, ...)Считает один или несколько наборов символов. Если существует более одного набора символов, подсчитывается пересечение этих наборов19 str.crypt (other_str)Применяет односторонний криптографический хеш к str. Аргументом является строка соли, которая должна состоять из двух символов, каждый символ в диапазоне a.z, A.Z, 0.9,. или /.20 str.delete(other_str, ...)Возвращает копию str со всеми символами на пересечении ее аргументов удаленными. 21 str.delete! (other_str, ...)То же, что и удаление, но изменения вносятся на месте.22 str.downcaseВозвращает копию str, в которой все прописные буквы заменены строчными. 23 str.downcase!То же, что и downcase, но изменения вносятся на месте. 24 str.dumpВозвращает версию str, в которой все непечатаемые символы заменены нотацией \nnn, а все специальные символы экранированы. 25 str.each (separator=$/) {|substr|block}Разделяет строку, используя аргумент в качестве разделителя записей (по умолчанию $/), передавая каждую подстроку в предоставленный блок. 26 str.each_byte {|fixnum|block}Передает каждый байт из str в блок, возвращая каждый байт как десятичное представление байта. 27 str.each_line (separator=$/) {|substr|block}Разделяет строку, используя аргумент в качестве разделителя записей (по умолчанию $/), передавая каждую подстроку в предоставленный блок. 28 str.empty?Возвращает истину, если str пуста (имеет нулевую длину) .29 str.eql?(over)Две строки равны, если имеют одинаковую длину и содержимое. 30 str.gsub(pattern,замена) [or] str.gsub(patern) {|match|block} Возвращает копию str, в которой все вхождения шаблона заменены либо на замену, либо на значение блока. Шаблон обычно будет Regexp; если это строка, то метасимволы регулярного выражения не будут интерпретироваться (то есть /\d/ будет соответствовать цифре, но '\d' будет соответствовать обратной косой черте, за которой следует 'd') 31 str[fixnum] [or] str[fixnum, fixnum] [or] str[диапазон] [or] str[regexp] [or] str[regexp, fixnum] [or] str[other_str]Ссылается на str, используя следующие аргументы: один Fixnum, возвращает код символа в fixnum; два фиксированных числа, возвращает подстроку, начиная со смещения (первое фиксированное число) до длины (второе фиксированное число); диапазон, возвращает подстроку в диапазоне; regexp возвращает часть совпавшей строки; regexp с fixnum, возвращает совпадающие данные с fixnum; other_str возвращает подстроку, соответствующую other_str. Отрицательное Fixnum начинается в конце строки с -1.32 str [fixnum] = fixnum [or] str [fixnum] = new_str [or] str [fixnum, fixnum] = new_str [or] str [range] = aString [or] str [regexp] = new_str [or] str [regexp, fixnum] = new_str [или] str [other_str] = new_str] Заменить (назначить) всю строку или ее часть. Синоним slice! .33 str.gsub! (pattern, замена) [or] str.gsub! (pattern) {| совпадение | блок}Выполняет замены String # gsub на месте, возвращая str или nil, если подстановки не выполнялись. 34 str.hashВозвращает хеш на основе длины строки и содержимого. 35 str.hexОбрабатывает ведущие символы из str как строку шестнадцатеричных цифр (с необязательным знаком и необязательным 0x) и возвращает соответствующее число. При ошибке возвращается ноль. 36 str.include? other_str [или] str.include? fixnumВозвращает истину, если строка содержит данную строку или символ. 37 str.index (substring [, offset]) [or]str.index (fixnum [, offset]) [or]str.index (regexp (регулярное выражение) [, offset])Возвращает индекс первого вхождения данной подстроки, символа (fixnum) или шаблона (regexp) в str. Если не найдено, возвращает ноль. Если присутствует второй параметр. Если присутствует второй параметр, он указывает позицию в строке для завершения поиска. Символы за пределами этой точки учитываться не будут. 38 str.insert(index, other_str)Inserts other_str before the character at the given index, modifying str. Negative indices count from the end of the string, and insert after the given character. The intent is to insert a string so that it starts at the given index.39 str.inspectReturns a printable version of str, with special characters escaped.40 str.intern [or] str.to_symReturns the Symbol corresponding to str, creating the symbol if it did not previously exist.41 str.lengthReturns the length of str. Compare size.42 str.ljust(integer, padstr=' ')If integer is greater than the length of str, returns a new String of length integer with str left-justified and padded with padstr; otherwise, returns str.43 str.lstripReturns a copy of str with leading whitespace removed.44 str.lstrip!Removes leading whitespace from str, returning nil if no change was made.45 str.match(pattern)Converts pattern to a Regexp (if it isn't already one), then invokes its match method on str.46 str.octTreats leading characters of str as a string of octal digits (with an optional sign) and returns the corresponding number. Returns 0 if the conversion fails.47 str.replace(other_str)Replaces the contents and taintedness of str with the corresponding values in other_str.48 str.reverseReturns a new string with the characters from str in reverse order.49 str.reverse!Reverses str in place.50 str.rindex(substring [, fixnum]) [or] str.rindex(fixnum [, fixnum]) [or] str.rindex(regexp [, fixnum])Returns the index of the last occurrence of the given substring, character (fixnum), or pattern (regexp) in str. Returns nil if not found. If the second parameter is present, it specifies the position in the string to end the search.characters beyond this point won't be considered.51 str.rjust (integer, padstr = '')Если integer больше длины str, возвращает новую строку длины integer с выравниванием str по правому краю и дополнением padstr; в противном случае возвращает str.52 str.rstripВозвращает копию str с удаленными завершающими пробелами. 53 str.rstrip!Удаляет завершающие пробелы из str, возвращая nil, если никаких изменений не было. 54 str.scan (pattern) [or]str.scan (pattern) {|match, ... | block}Обе формы повторяются через str в соответствии с шаблоном (который может быть Regexp или String). Для каждого совпадения генерируется результат, который либо добавляется в массив результатов, либо передается в блок. Если в шаблоне нет групп, каждый отдельный результат состоит из совпадающей строки $ &. Если шаблон содержит группы, каждый отдельный результат сам по себе представляет собой массив, содержащий по одной записи для каждой группы. 55 str.slice (fixnum) [or] str.slice (fixnum, fixnum) [or] str.slice (диапазон) [или] str.slice (регулярное выражение) [или] str.slice (regexp, fixnum) [или] str.slice (other_str) См. Str [fixnum] и т. д. str.slice! (fixnum) [или] str.slice! (fixnum, fixnum) [или] str.slice! (диапазон) [или] str.slice! (regexp) [или] str.slice! (other_str)Удаляет указанную часть из str и возвращает удаленную часть. Формы, которые принимают Fixnum, вызовут IndexError, если значение вне допустимого диапазона; форма Range вызовет ошибку RangeError, а формы Regexp и String будут молча игнорировать присвоение. 56 str.split (pattern = $ ;, [limit])Делит строку на подстроки на основе разделителя, возвращая массив этих подстрок. Если шаблон является строкой, то ее содержимое используется в качестве разделителя при разделении str. Если шаблон представляет собой одиночный пробел, str разбивается на пробелы, при этом ведущие пробелы и серии непрерывных пробельных символов игнорируются. Если pattern - это Regexp, str делится там, где соответствует шаблон. Каждый раз, когда шаблон соответствует строке нулевой длины, str разбивается на отдельные символы. Если шаблон не указан, значение $; используется. Если $; равно нулю (по умолчанию), str разбивается на пробелы, как если бы были указаны ``. Если параметр limit опущен, завершающие пустые поля подавляются. Если limit является положительным числом, будет возвращено не более того количества полей (если limit равен 1, вся строка возвращается как единственная запись в массиве). Если отрицательный, нет ограничения на количество возвращаемых полей, и завершающие пустые поля не подавляются.57 str.squeeze ([other_str] *)Создает набор символов из параметра (ов) other_str, используя процедуру, описанную для String # count. Возвращает новую строку, в которой строки одного и того же символа, встречающиеся в этом наборе, заменяются одним символом. Если аргументы не указаны, все серии одинаковых символов заменяются одним символом. 58 str.squeeze! ([Other_str] *)Сжимает str на месте, возвращая либо str, либо nil, если не было внесено никаких изменений. Возвращает копию str с удаленными начальными и конечными пробелами. 60 str.strip!Удаляет начальные и конечные пробелы из str. Возвращает nil, если str не была изменена. 61 str.sub (шаблон, замена) [или] str.sub (шаблон) {| соответствие | блок}Возвращает копию str с заменой первого вхождения шаблона либо на замену, либо на значение блока. Шаблон обычно будет Regexp; если это строка, то метасимволы регулярного выражения не будут интерпретироваться. 62 str.sub! (шаблон, замена) [или] str.sub! (шаблон) {| совпадение | блок}Выполняет замены String # sub на месте, возвращая str или nil, если подстановки не выполнялись. 63 str.succ [или] str.nextВозвращает преемника str.64 str.succ! [или] str.next!Эквивалентен String # succ, но изменяет получатель на месте. 65 str.sum (n = 16)Возвращает базовую n-битную контрольную сумму символов в str, где n - необязательный параметр Fixnum, по умолчанию равный 16. Результатом является просто сумма двоичного значения каждого символа в str по модулю 2n - 1. Это не особенно хорошая контрольная сумма. 66 str.swapcaseВозвращает копию str с прописными буквенными символами, преобразованными в нижний регистр, и строчные символы, преобразованные в верхний регистр. 67 str.swapcase!Эквивалентно String # swapcase, но изменяет получатель на месте, возвращая str или nil, если не было сделано никаких изменений. Возвращает результат интерпретации начальных символов в str как числа с плавающей запятой. Посторонние символы после конца допустимого числа игнорируются. Если в начале str нет действительного числа, возвращается 0,0. Этот метод никогда не вызывает исключения. 69 str.to_i (base = 10)Возвращает результат интерпретации ведущих символов в str как целочисленного основания (основание 2, 8, 10 или 16). Посторонние символы после конца допустимого числа игнорируются. Если в начале str нет действительного числа, возвращается 0. Этот метод никогда не вызывает исключения. 70 str.to_s [или] str.to_strВозвращает получателя. 71 str.tr (from_str, to_str)Возвращает копию str с символами в from_str, замененными соответствующими символами в to_str. Если to_str короче from_str, он дополняется последним символом. Обе строки могут использовать нотацию c1.c2 для обозначения диапазонов символов, а from_str может начинаться с символа ^, который обозначает все символы, кроме перечисленных. 72 str.tr! (From_str, to_str)Переводит str на место, используя те же правила, что и String # tr. Возвращает str или nil, если изменений не было. 73 str.tr_s (from_str, to_str)Обрабатывает копию str, как описано в разделе String # tr, затем удаляет повторяющиеся символы в регионах, на которые повлияла трансляция. 74 str.tr_s! (From_str, to_str)Выполняет обработку String # tr_s для str на месте, возвращая str или nil, если не было внесено никаких изменений. 75 str.unpack (format)Декодирует строку str (которая может содержать двоичные данные) в соответствии со строкой формата, возвращая массив каждого извлеченного значения. Строка формата состоит из последовательности односимвольных директив, обобщенных в Таблице 18. За каждой директивой может следовать номер, указывающий, сколько раз нужно повторить с этой директивой. Звездочка (*) использует все оставшиеся элементы. Каждая директива sSiIlL может сопровождаться знаком подчеркивания (_), чтобы использовать собственный размер базовой платформы для указанного типа; в противном случае используется согласованный размер, не зависящий от платформы. Пробелы игнорируются в строке формата. 76 str.upcaseВозвращает копию str, в которой все строчные буквы заменены прописными. Операция не зависит от языкового стандарта. Затронуты только символы от a до z. 77 str.upcase!Изменяет содержимое str на верхний регистр, возвращая nil, если не было сделано никаких изменений. 78 str.upto (other_str) {| s | блок}Перебирает последовательные значения, начиная с str и заканчивая other_str включительно, передавая каждое значение по очереди блоку. Для создания каждого значения используется метод String # succ.

Директивы распаковки строк (String unpack directives):

В следующей таблице перечислены директивы unpack для метода String # unpack.


Директива(Directive) Возврат(Return) Описание(Description) A String C удаленными конечными нулями и пробелами.a String String.B String Извлекает биты из каждого символа (сначала старший бит).b String Извлекает биты из каждого символа (сначала младший значащий бит).C Fixnum Извлекает символ как целое число без знака.c Fixnum Извлечь символ как целое число.D, d Float Обрабатывать символы sizeof (double) как собственные двойные.E Float Обработка символов sizeof (double) как двойных в порядке младших байтов.e Float Обработка символов sizeof (float) как числа с плавающей запятой в порядке младших байтов.F, f Float Обрабатывать символы sizeof (float) как собственные числа с плавающей запятой.G Float Обработка символов sizeof (double) как двойных в сетевом порядке байтов.g String Обрабатывать символы sizeof (float) как float в сетевом порядке байтов.H String Извлечь шестнадцатеричные полубайты из каждого символа (сначала старший бит)h String Извлекает шестнадцатеричные полубайты из каждого символа (сначала младший бит).I Integer Treat sizeof (int) (modifed by _) последовательных символов как беззнаковое собственное целое число.i Integer Treat sizeof (int) (modifed by _) последовательные символы как собственное целое число со знаком.L Integer Обработка четырех (modifed by _) последовательных символов как собственного длинного целого числа без знака.l Integer Pассматривать четыре (modifed by _) последовательных символа как родное длинное целое число со знаком.M String Quoted-printable.m String Base64-encoded.N Integer Treat четыре символа как длинный без знака в сетевом порядке байтов.n Fixnum Pассматривать два символа как беззнаковый короткий в сетевом порядке байтов.P String Обрабатывать символы sizeof (char *) как указатель и возвращать символы \emph {len} из указанного места.p String Treat sizeof (char *) символов как указатель на строку с нулевым завершением.Q Integer Обработка восьми символов как четверного слова без знака (64 бита).q Integer Обработка восьми символов как четверного слова со знаком (64 бита).S Fixnum Обработка двух (разных, если используется _) последовательных символов как беззнакового короткого символа в собственном порядке байтов.s Fixnum Обработка двух (разных, если используется _) последовательных символов как короткого знака со знаком в собственном порядке байтов.U Integer UTF-8 символов как целые числа без знака. u String UU-кодирование.V Fixnum Обращается с четырьмя символами как беззнаковыми длинными в обратном порядке байтов.v Fixnum Обращается с двумя символами как беззнаковыми короткими строками в порядке байтов с прямым порядком байтов.w Integer BER-compressed integerX Переход на один символ назад.x Переход на один символ вперед.Z String C удалением конечных нулей до первого нуля с помощью *.@ Перейти к смещению, заданному аргументом длины.


Пример:

Попробуйте следующий пример, чтобы распаковать различные данные.

"abc \0\0abc \0\0".unpack('A6Z6') #=> ["abc", "abc "]

"abc \0\0".unpack('a3a3') #=> ["abc", " \000\000"]

"abc \0abc \0".unpack('Z*Z*') #=> ["abc ", "abc "]

"aa".unpack('b8B8') #=> ["10000110", "01100001"]

"aaa".unpack('h2H2c') #=> ["16", "61", 97]

"\xfe\xff\xfe\xff".unpack('sS') #=> [-2, 65534]

"now=20is".unpack('M*') #=> ["now is"]

"whole".unpack('xax2aX2aX1aX2a') #=> ["h", "e", "l", "l", "o