Учебники

Рубин — Струны

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

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

'This is a simple Ruby string literal'

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

'Won\'t you read O\'Reilly\'s book?'

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

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

Замена выражения

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

Live Demo

#!/usr/bin/ruby

x, y, z = 12, 36, 72
puts "The value of x is #{ x }."
puts "The sum of x and y is #{ x + y }."
puts "The average was #{ (x + y + z)/3 }."

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

The value of x is 12.
The sum of x and y is 48.
The average was 40.

Строки с разделителями

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

%{Ruby is fun.}  equivalent to "Ruby is fun."
%Q{ Ruby is fun. } equivalent to " Ruby is fun. "
%q[Ruby is fun.]  equivalent to a single-quoted string
%x!ls! equivalent to back tick command output `ls`

Побег персонажей

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

Кодировка символов

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

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

$KCODE = 'u'

ASCII (такой же, как ни один). Это по умолчанию.

е

EUC.

N

Нет (так же, как ASCII).

U

UTF-8.

Строковые встроенные методы

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

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

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

Live Demo

#!/usr/bin/ruby

myStr = String.new("THIS IS TEST")
foo = myStr.downcase

puts "#{foo}"

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

this is test

str% arg

Форматирует строку, используя спецификацию формата. Аргумент должен быть массивом, если он содержит более одной подстановки. Для получения информации о спецификации формата см. Sprintf в разделе «Модуль ядра».

str * integer

Возвращает новую строку, содержащую целое число раз str. Другими словами, str повторяется целое число.

str + other_str

Объединяет other_str на ул.

ул << объект

Объединяет объект на ул. Если объект является Fixnum в диапазоне 0,255, он преобразуется в символ. Сравните это с concat.

str <=> other_str

Сравнивает str с other_str, возвращая -1 (меньше), 0 (равно) или 1 (больше). Сравнение чувствительно к регистру.

str == obj

Проверяет str и obj на равенство. Если obj не является строкой, возвращает false; возвращает true, если str <=> obj возвращает 0.

str = ~ obj

Сопоставляет str с шаблоном регулярного выражения obj. Возвращает позицию, где начинается матч; иначе ложно.

str.capitalize

Заглавная строка.

str.capitalize!

То же, что и с заглавной буквы, но изменения сделаны на месте.

str.casecmp

Делает сравнение строк без учета регистра.

str.center

Центрирует строку.

str.chomp

Удаляет разделитель записей ($ /), обычно \ n, с конца строки. Если разделитель записей не существует, ничего не делает.

str.chomp!

То же, что chomp, но изменения сделаны на месте.

str.chop

Удаляет последний символ в ул.

str.chop!

То же, что и chop, но изменения сделаны на месте.

str.concat (other_str)

Объединяет other_str на ул.

str.count (str, …)

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

str.crypt (other_str)

Применяет односторонний криптографический хеш к str. Аргументом является строка соли, которая должна быть длиной два символа, каждый символ находится в диапазоне az, AZ, 0.9,. или же /.

str.delete (other_str, …)

Возвращает копию строки со всеми символами в пересечении удаленных аргументов.

str.delete! (other_str, …)

То же самое, что и удаление, но изменения сделаны на месте.

str.downcase

Возвращает копию строки со всеми заглавными буквами, замененными строчными.

str.downcase!

То же, что и в нижнем регистре, но изменения сделаны на месте.

str.dump

Возвращает версию str, в которой все непечатаемые символы заменены на \ nnn, а все специальные символы экранированы.

str.each (separator = $ /) {| substr | блок}

Разделяет str, используя аргумент в качестве разделителя записей ($ / по умолчанию), передавая каждую подстроку в предоставленный блок.

str.each_byte {| fixnum | блок}

Передает каждый байт от str к блоку, возвращая каждый байт в виде десятичного представления байта.

str.each_line (разделитель = $ /) {| substr | блок}

Разделяет str, используя аргумент в качестве разделителя записей ($ / по умолчанию), передавая каждую подстроку в предоставленный блок.

str.empty?

Возвращает true, если str пуст (имеет нулевую длину).

str.eql? (другое)

Две строки равны, если они имеют одинаковую длину и содержание.

str.gsub (шаблон, замена) [или]

str.gsub (pattern) {| match | блок}

Возвращает копию str со всеми вхождениями шаблона, замененными либо заменой, либо значением блока. Шаблон обычно будет регулярным выражением; если это String, то метасимволы регулярного выражения не будут интерпретироваться (то есть / \ d / будет соответствовать цифре, но \ d будет соответствовать обратной косой черте, за которой следует ‘d’).

str [fixnum] [или] str [fixnum, fixnum] [или] str [диапазон] [или] str [регулярное выражение] [или] str [регулярное выражение, fixnum] [или] str [other_str]

Ссылки str, используя следующие аргументы: один Fixnum, возвращает код символа в fixnum; два Fixnum, возвращает подстроку, начиная со смещения (первый fixnum) до длины (второй fixnum); диапазон, возвращает подстроку в диапазоне; регулярное выражение возвращает часть совпавшей строки; регулярное выражение с fixnum, возвращает сопоставленные данные в fixnum; other_str возвращает подстроку, соответствующую other_str. Отрицательный Fixnum начинается в конце строки с -1.

str [fixnum] = fixnum [или] str [fixnum] = new_str [или] str [fixnum, fixnum] = new_str [или] str [range] = aString [или] str [regexp] = новый_str [или] str [регулярное выражение , fixnum] = new_str [or] str [other_str] = new_str]

Заменить (назначить) всю или часть строки. Синоним среза!

str.gsub! (шаблон, замена) [или] str.gsub! (шаблон) {| match | block}

Выполняет подстановки String # gsub на месте, возвращая str или nil, если подстановки не выполнялись.

str.hash

Возвращает хеш на основе длины строки и содержимого.

str.hex

Обрабатывает начальные символы из str как строку шестнадцатеричных цифр (с необязательным знаком и необязательным 0x) и возвращает соответствующее число. Ноль возвращается при ошибке.

str.include? other_str [или] str.include? Fixnum

Возвращает true, если str содержит данную строку или символ.

str.index (подстрока [, смещение]) [или]

str.index (fixnum [, offset]) [or]

str.index (регулярное выражение [, смещение])

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

str.insert (index, other_str)

Вставляет other_str перед символом по указанному индексу, изменяя str. Отрицательные индексы отсчитываются от конца строки и вставляются после заданного символа. Намерение состоит в том, чтобы вставить строку так, чтобы она начиналась с заданного индекса.

str.inspect

Возвращает версию для печати str с экранированными специальными символами.

str.intern [or] str.to_sym

Возвращает Символ, соответствующий str, создавая символ, если он не существовал ранее.

str.length

Возвращает длину ул. Сравните размер.

str.ljust (integer, padstr = »)

Если целое число больше, чем длина строки, возвращает новую строку с целым числом длины с выравниванием по левому краю и дополнением padstr; в противном случае возвращает ул.

str.lstrip

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

str.lstrip!

Удаляет начальные пробелы из str, возвращая nil, если не было внесено никаких изменений.

str.match (шаблон)

Преобразует шаблон в регулярное выражение (если он еще не был), а затем вызывает его метод сопоставления на str.

str.oct

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

str.replace (other_str)

Заменяет содержимое и зараженность str соответствующими значениями в other_str.

str.reverse

Возвращает новую строку с символами из str в обратном порядке.

str.reverse!

Реверс на ул.

str.rindex (подстрока [, fixnum]) [или]

str.rindex (fixnum [, fixnum]) [или]

str.rindex (regexp [, fixnum])

Возвращает индекс последнего вхождения данной подстроки, символа (fixnum) или шаблона (regexp) в str. Возвращает ноль, если не найден. Если присутствует второй параметр, он указывает позицию в строке для завершения поиска. Символы, выходящие за пределы этой точки, рассматриваться не будут.

str.rjust (integer, padstr = »)

Если целое число больше, чем длина строки, возвращает новую строку с целым числом длины с выравниванием по правому краю строки с дополнением padstr; в противном случае возвращает ул.

str.rstrip

Возвращает копию str с удаленными конечными пробелами.

str.rstrip!

Удаляет завершающие пробелы из str, возвращая ноль, если не было внесено никаких изменений.

str.scan (шаблон) [или]

str.scan (pattern) {| match, … | блок}

Обе формы перебирают str, совпадая с шаблоном (который может быть регулярным выражением или строкой). Для каждого совпадения результат генерируется и либо добавляется в массив результатов, либо передается в блок. Если шаблон не содержит групп, каждый отдельный результат состоит из совпавшей строки, $ &. Если шаблон содержит группы, каждый отдельный результат сам является массивом, содержащим одну запись на группу.

str.slice (fixnum) [или] str.slice (fixnum, fixnum) [или]

str.slice (диапазон) [или] str.slice (регулярное выражение) [или]

str.slice (регулярное выражение, fixnum) [или] str.slice (other_str)

Смотрите str [fixnum] и т. Д.

str.slice! (fixnum) [или] str.slice! (fixnum, fixnum) [или]

str.slice! (диапазон) [или] str.slice! (регулярное выражение) [или]

str.slice! (other_str)

Удаляет указанную часть из str и возвращает удаленную часть. Формы, которые принимают Fixnum, вызовут IndexError, если значение выходит за пределы диапазона; форма Range вызовет RangeError, а формы Regexp и String будут молча игнорировать назначение.

str.split (pattern = $, [limit])

Делит str на подстроки на основе разделителя, возвращая массив этих подстрок.

Если pattern является String, то его содержимое используется в качестве разделителя при разбиении str. Если шаблон представляет собой один пробел, str разделяется на пробельные символы, причем начальные пробельные символы и серии непрерывных пробельных символов игнорируются.

Если pattern является регулярным выражением, str делится там, где образец совпадает. Всякий раз, когда шаблон соответствует строке нулевой длины, строка разбивается на отдельные символы.

Если шаблон опущен, значение $; используется. Если $; равен nil (это значение по умолчанию), str разделяется на пробелы, как если бы « были указаны.

Если параметр limit пропущен, завершающие нулевые поля подавляются. Если limit — положительное число, будет возвращено не более того количества полей (если limit — 1, вся строка возвращается как единственная запись в массиве). При отрицательном значении число возвращаемых полей не ограничено, а завершающие нулевые поля не подавляются.

str.squeeze ([other_str] *)

Создает набор символов из параметра (ов) other_str, используя процедуру, описанную для String # count. Возвращает новую строку, в которой серии одного и того же символа, встречающиеся в этом наборе, заменяются одним символом. Если аргументы не указаны, все серии идентичных символов заменяются одним символом.

str.squeeze! ([other_str] *)

Сжимает str на месте, возвращая либо str, либо ноль, если не было внесено никаких изменений.

str.strip

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

str.strip!

Удаляет начальные и конечные пробелы с ул. Возвращает ноль, если str не был изменен.

str.sub (шаблон, замена) [или]

str.sub (pattern) {| match | блок}

Возвращает копию строки с первым вхождением шаблона, замененным либо заменой, либо значением блока. Шаблон обычно будет регулярным выражением; если это строка, то метасимволы регулярных выражений интерпретироваться не будут.

str.sub! (шаблон, замена) [или]

str.sub! (pattern) {| match | блок}

Выполняет подстановки String # sub на месте, возвращая str или nil, если подстановки не выполнялись.

str.succ [или] str.next

Возвращает преемника на ул.

str.succ! [или] str.next!

Эквивалент String # succ, но изменяет получателя на месте.

сумма (n = 16)

Возвращает базовую n-битную контрольную сумму символов в str, где n — необязательный параметр Fixnum, значение по умолчанию равно 16. Результатом является просто сумма двоичного значения каждого символа в str по модулю 2n — 1. Это не особенно хорошая контрольная сумма.

str.swapcase

Возвращает копию строки с заглавными буквенными символами, преобразованными в строчные и строчными.

str.swapcase!

Эквивалентно String # swapcase, но изменяет получателя на месте, возвращая str или nil, если не было внесено никаких изменений.

str.to_f

> Возвращает результат интерпретации начальных символов в str как числа с плавающей запятой. Посторонние символы после конца действительного числа игнорируются. Если в начале строки str нет действительного числа, возвращается 0.0. Этот метод никогда не вызывает исключение.

str.to_i (база = 10)

Возвращает результат интерпретации начальных символов в str как целочисленное основание (основание 2, 8, 10 или 16). Посторонние символы после конца действительного числа игнорируются. Если в начале строки str нет действительного числа, возвращается 0. Этот метод никогда не вызывает исключение.

str.to_s [или] str.to_str

Возвращает получатель.

str.tr (from_str, to_str)

Возвращает копию str с символами в from_str, замененными соответствующими символами в to_str. Если to_str короче, чем from_str, он дополняется последним символом. Обе строки могут использовать нотацию c1.c2 для обозначения диапазонов символов, а from_str может начинаться с ^, который обозначает все символы, кроме перечисленных.

str.tr! (from_str, to_str)

Переводит str на место, используя те же правила, что и String # tr. Возвращает str или nil, если не было внесено никаких изменений.

str.tr_s (from_str, to_str)

Обрабатывает копию str, как описано в разделе String # tr, затем удаляет повторяющиеся символы в регионах, на которые повлиял перевод.

str.tr_s! (from_str, to_str)

Выполняет обработку String # tr_s для str на месте, возвращает str или nil, если не было внесено никаких изменений.

str.unpack (формат)

> Декодирует str (который может содержать двоичные данные) в соответствии со строкой формата, возвращая массив каждого извлеченного значения. Строка формата состоит из последовательности односимвольных директив, обобщенных в Таблице 18. За каждой директивой может следовать число, указывающее количество повторений с этой директивой. Звездочка (*) будет использовать все оставшиеся элементы. Каждая из директив sSiIlL может сопровождаться подчеркиванием (_), чтобы использовать собственный размер базовой платформы для указанного типа; в противном случае он использует независимый от платформы постоянный размер. Пробелы игнорируются в строке формата.

str.upcase

Возвращает копию str, в которой все строчные буквы заменены на прописные. Операция не зависит от локали. Это касается только символов от a до z.

str.upcase!

Изменяет содержимое строки в верхний регистр, возвращая ноль, если не было сделано никаких изменений.

str.upto (other_str) {| s | блок}

Выполняет итерацию последовательных значений, начиная с str и заканчивая включением other_str, передавая каждое значение по очереди в блок. Метод String # succ используется для генерации каждого значения.

Директива по распаковке струн

пример

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