English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Объект String в Ruby используется для хранения или обработки последовательности одного или нескольких байтов.
Строки в Ruby делятся на строки с одинарными кавычками ('), и строки с двойными кавычками (") - различие заключается в том, что строки с двойными кавычками поддерживают больше символов-escape.
Самый простой тип строки - это строка с одинарными кавычками, где строка хранится в одинарных кавычках:
'Это строка программы на Ruby'
Если вам нужно использовать символы апострофа в строке с апострофом, то вам нужно использовать обратную косую черту (\) в строке с апострофом, чтобы интерпретатор Ruby не считал этот символ апострофа концом строки:
'Won\'t you read O\'Reilly\'s book?'
反斜杠也能转义另一个反斜杠,这样第二个反斜杠本身不会解释为转义字符。
Ниже приведены характеристики строк в Ruby.
В двойных кавычках мы можем использовать #{} Использование знака #{} для вычисления значения выражения:
Вложение переменных в строку:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- name1 = "Joe" name2 = "Mary" puts "Привет, #{name1}, где #{name2}?"
В приведенных выше примерах результат выполнения выводится следующим образом:
Привет, Joe, где Mary?
Выполнение математических операций в строке:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- x, y, z = 12, 36, 72 puts "Значение x равно #{x}" puts "Значение x + y равно #{x + y}" puts "Среднее арифметическое x + y + z равно #{(x + y + z)/3}"
В приведенных выше примерах результат выполнения выводится следующим образом:
Значение x равно 12 Значение x + y равно 48 Среднее арифметическое x + y + z равно 40
Ruby также поддерживает строки переменных, начинающиеся с %q и %Q. %q использует правила одинарных кавычек, а %Q использует правила двойных кавычек, за которыми следует соответствующий начальный и завершающий символ (например, ! [ { и } ] ).
Символы, следующие за q или Q, являются разделителями. Разделитель может быть любым однимобратным символом, не являющимся алфавитно-цифровым. Например: [,{,(,<,! и т.д., строка будет читаться до тех пор, пока не будет найден соответствующий завершающий символ.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- desc1 = %Q{Строки Ruby могут использовать '' и "".} desc2 = %q|Строки Ruby могут использовать '' и "".| puts desc1 puts desc2
В приведенных выше примерах результат выполнения выводится следующим образом:
Строки Ruby могут использовать '' и "". Строки Ruby могут использовать '' и "".
Ниже приведен список символов escape или непечатных символов, которые можно использовать с символом escape.
Внимание:В строке, заключенной в двойные кавычки, символы escape будут интерпретированы. В строке, заключенной в одинарные кавычки, символы escape не будут интерпретированы и будут выводиться в исходном виде.
Символ обратной косой черты | Символ шестнадцатеричной системы счисления | Description |
---|---|---|
\a | 0x07 | Сигнальный символ |
\b | 0x08 | Клавиша Backspace |
\cx | Control-x | |
\C-x | Control-x | |
\e | 0x1b | Символ Escape |
\f | 0x0c | Перенос страницы |
\M-\C-x | Meta-Control-x | |
\n | 0x0a | Перенос строки |
\nnn | Оctalное представление, где диапазон n составляет 0.7 | |
\r | 0x0d | Возврат каретки |
\s | 0x20 | Пробел |
\t | 0x09 | Табуляция |
\v | 0x0b | Вертикальная табуляция |
\x | Символ x | |
\xnn | Шестнадцатеричное представление, где n варьируется от 0x до 0x9, a.f или A.F |
По умолчанию в Ruby используется набор символов ASCII, символы могут быть представлены одним байтом. Если вы используете UTF-8 или другие современные наборы символов, символы могут быть представлены от одного до четырех байтов.
Вы можете изменить набор символов в начале программы, как показано ниже:
$KCODE = 'u'
Ниже приведены возможные значения $KCODE.
Кодирование | Description |
---|---|
a | ASCII (равно none). Это по умолчанию. |
e | EUC. |
n | None (равно ASCII). |
u | UTF-8. |
Нам нужно иметь пример объекта String, чтобы вызывать методы String. Ниже приведен способ создания объекта String:
new [String.new(str="")]
Это вернет строку, содержащую str Новый строковый объект копии. Теперь, используя str Объект, мы можем вызывать любые доступные примерные методы. Например:
#!/usr/bin/ruby myStr = String.new("THIS IS TEST") foo = myStr.downcase puts "#{foo}"
Это会产生以下结果:
this is test
Ниже перечислены общие методы строк (предполагается, что str является объектом String):
Номер | Метод & описание |
---|---|
1 | str % arg Форматирование строки по шаблону. Если arg содержит более одной замены, то arg должен быть массивом. Для получения更多信息 о форматировании см. "Ядро модулей" под sprintf. |
2 | str * integer Возвращает новую строку, содержащую integer str. Иначе говоря, str повторяется integer раз. |
3 | str + other_str Присоединить other_str к str. |
4 | str << obj Соединение объекта с строкой. Если объект является фиксированным числом Fixnum в диапазоне от 0 до 255, то оно преобразуется в символ. Сравните это с concat. |
5 | str <=> other_str Сравнение str с other_str, возвращает -1 (меньше), 0 (равно) или 1 (больше). Сравнение чувствительно к регистру. |
6 | str == obj Проверка эквивалентности str и obj. Если obj не строка, то возвращает false, если str <=> obj, то возвращает true, возвращает 0. |
7 | str =~ obj 7 |
str =~ obj | Соответствовать шаблону регулярного выражения obj в str. Возвращает позицию начала соответствия, в противном случае возвращает false. 8 str[position] # Обратите внимание, что возвращается ASCII-код, а не символ str[start, length] str[start..end] |
str[start...end] | Использовать индекс для вырезания подстроки 9 |
str.capitalize | Преобразовать строку в верхний регистр. 10 |
str.capitalize! | Как и capitalize, но str изменяется и возвращает. 11 |
str.casecmp | Не различать строчные и прописные буквы при сравнении строк. str.center |
Центрировать строку. | 13 str.chomp |
Удалить из строки символы разделителя строк ($/), обычно \n. Если разделитель строк отсутствует, не выполняется никакие действия. | 14 str.chomp! |
Как и chomp, но str изменяется и возвращает. | str.chop Удалить последний символ из str. |
16 | str.chop! Как и chop, но str изменяется и возвращает. |
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, ...) Как и delete, но str изменяется и возвращает. |
22 | str.downcase Вернуть копию str, где все заглавные буквы будут заменены на строчные. |
23 | str.downcase! Как и downcase, но str изменяется и возвращает. |
24 | str.dump Вернуть версию str, где все непечатные символы заменяются символом \nnn, а все специальные символы экранируются. |
25 | str.each(separator=$/) { |substr| block } Использование параметра в качестве разделителя записей (по умолчанию $/), разделение str, передача каждого подстроки блоку. |
26 | str.each_byte { |fixnum| block } Передает каждый байт str блоку, возвращая каждый байт в десятичной системе счисления. |
27 | str.each_line(separator=$/) { |substr| block } Использование параметра в качестве разделителя записей (по умолчанию $/) для разделения str, передача каждого подстроки блоку, предоставленному. |
28 | str.empty? Если str пуст (т.е. длина 0), то возвращает true. |
29 | str.eql?(other) Если две строки имеют одинаковую длину и содержимое, то эти строки равны. |
30 | str.gsub(pattern, replacement) [или] str.gsub(pattern) { |match| block } Возвращает копию str, все的出现 pattern заменяются replacement или значением block. |
31 | str[fixnum] [или] str[fixnum,fixnum] [или] str[range] [или] str[regexp] [или] str[regexp, fixnum] [или] str[other_str] Использование следующих параметров для ссылки на str: параметр - это Fixnum, возвращается код символа fixnum; параметр - два Fixnum, возвращается подстрока от смещения (первый fixnum) до длины (второй fixnum); параметр - диапазон, возвращается подстрока в диапазоне; параметр - регулярное выражение, возвращается часть соответствия строки; параметр - регулярное выражение с 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 [or] str[other_str] = new_str ] Заменяет всю строку или часть строки. Синоним slice!. |
33 | str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match| block } Выполняет замену с помощью String#gsub, возвращает str, если не было выполнено ни одной замены, то возвращает nil. |
34 | str.hash Возвращает хеш, основанный на длине и содержимом строки. |
35 | str.hex Считывает начальные символы строки str как строку шестнадцатеричных чисел (опциональный символ и опциональное 0x) и возвращает соответствующее число. Возвращает ноль при ошибке. |
36 | str.include? other_str [or] str.include? fixnum Возвращает true, если строка str содержит заданную строку или символ. |
37 | str.index(substring [, offset]) [or] str.index(fixnum [, offset]) [or] str.index(regexp [, offset]) Возвращает индекс первого出现的 подстроки, символа (fixnum) или шаблона (regexp) в строке str. Возвращает nil, если не найдено. Если предоставлен второй параметр, указывает позицию начала поиска в строке. |
38 | str.insert(index, other_str) Вставляет other_str перед символом с заданным индексом, изменяет str. Негативные индексы считают от конца строки, и вставляют после заданного символа. Intent - вставить строку в заданном индексе. |
39 | str.inspect Возвращает печатную версию str с escaping специальных символов. |
40 | str.intern [or] str.to_sym Возвращает символ, соответствующий str, если он до этого не существовал, то создает символ. |
41 | str.length Возвращает длину str. Сравните её с size. |
42 | str.ljust(integer, padstr=' ') Если integer больше длины str, то возвращает новую строку длиной integer, которая выровнена слева и заполнена padstr. В противном случае возвращает str. |
43 | str.lstrip Возвращает копию str, из которой удалены передние пробелы. |
44 | str.lstrip! Удаляет передние пробелы из str, если изменений нет, то возвращает nil. |
45 | str.match(pattern) Если pattern не является регулярным выражением, то преобразует pattern в регулярное выражение Regexp и вызывает его метод соответствия на str. |
46 | str.oct Возвращает строку, представляющую str в виде десятичной строки символов (с возможным знаком), и соответствующий номер. Если преобразование не удается, то возвращает 0. |
47 | str.replace(other_str) Заменяет содержимое str соответствующими значениями из other_str. |
48 | str.reverse Возвращает новый строку, которая является обратной последовательностью str. |
49 | str.reverse! 逆变 str, str изменяется и возвращается. |
50 | str.rindex(substring [, fixnum]) [or] str.rindex(fixnum [, fixnum]) [or] str.rindex(regexp [, fixnum]) Возвращает индекс последнего occurrences подстроки, символа (fixnum) или шаблона (regexp) в str. Если не найдено, то возвращает nil. Если предоставлен второй параметр, то он определяет позицию в строке, до которой выполняется поиск. Символы за этой точкой не учитываются. |
51 | str.rjust(integer, padstr=' ') Если integer больше длины str, возвращает новый строку длиной integer, выровненную справа, с padstr в качестве заполнителя. В противном случае возвращает str. |
52 | str.rstrip Возврат копии str, из которой удалены последующие пробелы. |
53 | str.rstrip! Удаление последующих пробелов из str, если изменений нет, возвращает nil. |
54 | str.scan(pattern) [или] str.scan(pattern) { |match, ...| block } Два формата соответствия pattern (может быть регулярным выражением Regexp или строкой String) итерируют по str. Для каждого соответствия создается результат, который добавляется в массив результатов или передается в block. Если pattern не содержит групп, каждый независимый результат состоит из соответствующей строки и $&. Если pattern содержит группы, каждый независимый результат является массивом, содержащим входы каждой группы. |
55 | str.slice(fixnum) [или] str.slice(fixnum, fixnum) [или] str.slice(range) [или] str.slice(regexp) [или] str.slice(regexp, fixnum) [или] str.slice(other_str) См. str[fixnum], и т.д. str.slice!(fixnum) [или] str.slice!(fixnum, fixnum) [или] str.slice!(range) [или] str.slice!(regexp) [или] str.slice!(other_str) Удаление指定的 части из str и возврат удаленной части. Если значение выходит за пределы диапазона, использование параметра с Fixnum generates an IndexError. При использовании параметра в виде range generates a RangeError, при использовании Regexp и String действие будет пропущено. |
56 | str.split(pattern=$;, [limit]) На основе разделителя разбивает строку str на подстроки и возвращает массив этих подстрок. Если pattern является строкой String, то при разрезании строки str она используется в качестве разделителя. Если pattern является единственным пробелом, то строка str разрезается по пробелам, ведущие пробелы и последовательные пробелы игнорируются. Если pattern является регулярным выражением Regexp, то строка str разрезается по месту соответствия pattern. Когда pattern соответствует пустой строке, строка str разрезается на отдельные символы. Если параметр опущен pattern параметр, то используется значение $; . Если $; равно nil (по умолчанию), строка str разрезается по пробелам, как если бы был указан空间隔. Если параметр опущен limit Параметр, подавляет хвостовые null-поле. Если limit является положительным числом, то возвращается максимальное количество полей (если limit равно 1, то возвращается вся строка в качестве единственного входа в массив). Если limit является отрицательным числом, то количество возвращаемых полей не ограничивается, и хвостовые null-поле не подавляются. |
57 | str.squeeze([other_str]*) Использует программу, описанную в String#count, чтобы создать ряд символов из параметра other_str. Возвращает новую строку, где повторяющиеся символы в наборе заменяются одним символом. Если параметр не указан, все повторяющиеся символы заменяются одним символом. |
58 | str.squeeze!([other_str]*) Как и squeeze, но строка str изменяется и возвращается, если изменений нет, то возвращает nil. |
59 | str.strip Возвращает копию строки str, из которой удалены ведущие и хвостовые пробелы. |
60 | str.strip! Удаляет ведущие и хвостовые пробелы из строки str, если изменений нет, то возвращает nil. |
61 | str.sub(pattern, replacement) [or] str.sub(pattern) { |match| block } Возвращает копию строки str, где первое вхождение шаблона pattern заменяется значением replacement или block. Шаблон pattern обычно является регулярным выражением Regexp; если это строка String, то регулярные символы не интерпретируются. |
62 | str.sub!(pattern, replacement) [or] str.sub!(pattern) { |match| block } Выполняет замену String#sub и возвращает str, если замена не выполнена, то возвращается nil. |
63 | str.succ [или] str.next Возвращает наследование str. |
64 | str.succ! [или] str.next! Эквивалент String#succ, но str изменяется и возвращается. |
65 | str.sum(n=16) Возвращает n-bit контрольную сумму символов str, где n - опциональный параметр Fixnum, по умолчанию 16. Результат - это простая сумма байтовых значений каждого символа str, модуль 2n - 1. Это не особенно хороший контрольный сумм. |
66 | str.swapcase Возвращает копию str, где все заглавные буквы преобразуются в строчные, а все строчные буквы преобразуются в заглавные. |
67 | str.swapcase! Эквивалент String#swapcase, но str изменяется и возвращается, если изменений нет, то возвращается nil. |
68 | str.to_f Возвращает результат интерпретации начальных символов 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 короче, то он заполняется последним символом. Два строки могут быть указаны с помощью символа c1.c2 для обозначения диапазона символов. Если from_str начинается с ^, то это означает все символы, кроме перечисленных. |
72 | str.tr!(from_str, to_str) Эквивалент String#tr, но str изменяется и возвращается, если изменений нет, то возвращается nil. |
73 | str.tr_s(from_str, to_str) Обработайте str по правилам, описанным в String#tr, а затем удалите повторяющиеся символы, влияющие на перевод. |
74 | str.tr_s!(from_str, to_str) Equivalent to String#tr_s, but str will change and return, or return nil if there is no change. |
75 | str.unpack(format) Decode str according to the format string (may contain binary data), and return an array of each extracted value. The format character consists of a series of single-character instructions. A number can follow each instruction, indicating the number of times to repeat the instruction. An asterisk (*) will use all remaining elements. Instructions sSiIlL may follow an underscore (_) to use the local size size of the underlying platform for the specified type, otherwise, a consistent size size independent of the platform is used. Spaces in the format string are ignored. |
76 | str.upcase Return a copy of str with all lowercase letters replaced with uppercase letters. The operation is case-insensitive, only characters a to z are affected. |
77 | str.upcase! Change the content of str to uppercase, if there is no change then return nil. |
78 | str.upto(other_str) { |s| block } Traverse consecutive values starting with str, ending with other_str (inclusive), alternating each value to the block. The String#succ method is used to generate each value. |
The following table lists the unpacking commands of the String#unpack method.
Command | Return | Description |
---|---|---|
A | String | Remove trailing null and spaces. |
a | String | String. |
B | String | Extract bits from each character (first the most significant bit). |
b | String | Extract bits from each character (first the least significant bit). |
C | Fixnum | Extract a character as an unsigned integer. |
c | Fixnum | Extract a character as an integer. |
D, d | Float | Take characters of length sizeof(double) as native double. |
E | Float | Take characters of length sizeof(double) as littleendian byte order double. |
e | Float | Take characters of length sizeof(float) as littleendian byte order float. |
F, f | Float | Take characters of length sizeof(float) as native float. |
G | Float | Take characters of length sizeof(double) as double in network byte order. |
g | Float | Take characters of length sizeof(float) as float in network byte order. |
H | String | извлечь шестнадцатеричное из каждого символа (в首先是 наибольший значащий бит). |
h | String | извлечь шестнадцатеричное из каждого символа (в首先是 наименьший значащий бит). |
I | Integer | взять последовательные символы длины sizeof(int) (измененные через _) как native integer. |
i | Integer | взять последовательные символы длины sizeof(int) (измененные через _) как signed native integer. |
L | Integer | взять четыре (измененные через _) последовательных символа как unsigned native long integer. |
l | Integer | взять четыре (измененные через _) последовательных символа как signed native long integer. |
M | String | цитировать printable. |
m | String | Base64 кодирование. |
N | Integer | взять четыре символа как unsigned long в порядке network. |
n | Fixnum | взять два символа как unsigned short в порядке network. |
P | String | взять символы длины sizeof(char *) как указатель, и вернуться \emph{len} символов от указанного места. |
p | String | взять символы длины sizeof(char *) как указатель на символ с null-терминатором. |
Q | Integer | взять восемь символов как unsigned quad word (64 бита). |
q | Integer | взять восемь символов как signed quad word (64 бита). |
S | Fixnum | взять два (если используется _, то отличные) последовательных символа как unsigned short в порядке native. |
s | Fixnum | взять два (если используется _, то отличные) последовательных символа как signed short в порядке native. |
U | Integer | UTF-8 символ, как unsigned integer. |
u | String | UU кодирование. |
V | Fixnum | взять четыре символа как unsigned long в порядке little-endian. |
v | Fixnum | взять два символа как unsigned short в порядке little-endian. |
w | Integer | BER сжатый целое число. |
X | перейти на один символ назад. | |
x | перейти на один символ вперед. | |
Z | String | использовать вместе с *, чтобы удалить следущие null до первого null. |
@ | пропустить параметр offset, указанный значением length. |
пробуйте следующий пример, распаковать различные данные.
"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"]