English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
El objeto String en Ruby se utiliza para almacenar o operar una o más secuencias de bytes.
Las cadenas en Ruby se dividen en cadenas de comillas simples (') y cadenas de comillas dobles ("), la diferencia radica en que las cadenas de comillas dobles pueden soportar más caracteres de escape.
La cadena más simple es la cadena de comillas simples, es decir, la cadena que se almacena dentro de comillas simples:
'Esta es una cadena de un programa Ruby'
Si necesita usar un carácter de comilla simple dentro de una cadena de comillas simples, debe usar una barra invertida (\) en la cadena de comillas simples, de modo que el intérprete de Ruby no considere ese carácter de comilla simple como el símbolo de finalización de la cadena:
'¿No leerás el libro de O'Reilly?
La barra invertida también puede escapar a otra barra invertida, de modo que la segunda barra invertida no se interpreta como carácter de escape.
A continuación se muestran las características relacionadas con las cadenas en Ruby.
En una cadena de comillas dobles podemos usar: #{} Uso de almohadillas y corchetes para calcular el valor de una expresión:
Inserción de variables en una cadena:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- name1 = "Joe" name2 = "Mary" puts "Hola #{name1}, #{name2}
Los resultados de salida de los ejemplos anteriores son:
Hola Joe, ¿dónde está Mary?
Operaciones matemáticas en una cadena:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- x, y, z = 12, 36, 72 puts "El valor de x es #{x " puts "x + El valor de y es #{x + El valor de y es "y puts "x + y + La media de z es #{(x + y + z)/3 "}
Los resultados de salida de los ejemplos anteriores son:
El valor de x es 12 x + El valor de y es 48 x + y + El valor promedio de z es 40
Ruby también admite una variable de cadena guiada por %q y %Q, %q usa las reglas de comillas simples, mientras que %Q usa las reglas de comillas dobles, seguidas de un delimitador de inicio (! [ { y otros y un delimitador de finalización } ] ) y otros.
Los caracteres que siguen a q o Q son delimitadores. Los delimitadores pueden ser cualquier carácter no alfanumérico de un byte. Por ejemplo: [,{,(,<,! y otros, la cadena se leerá hasta que se encuentre el delimitador de finalización correspondiente.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- desc1 = %Q{Las cadenas de Ruby pueden usar '' y ""}. desc2 = %q|Las cadenas de Ruby pueden usar '' y "".| puts desc1 puts desc2
Los resultados de salida de los ejemplos anteriores son:
Las cadenas de Ruby pueden usar '' y "". Las cadenas de Ruby pueden usar '' y "".
El índice enumera los caracteres de escape o caracteres no imprimibles que se pueden usar con el símbolo de backslash.
Nota:En una cadena entre comillas dobles, los caracteres de escape se解析. En una cadena entre comillas simples, los caracteres de escape no se解析 y se muestran tal cual.
Símbolo de backslash | Carácter hexadecimal | Descripción |
---|---|---|
\a | 0x07 | Símbolo de alarma |
\b | 0x08 | Tecla de retroceso |
\cx | Control-x | |
\C-x | Control-x | |
\e | 0x1b | Carácter de escape |
\f | 0x0c | Carácter de página |
\M-\C-x | Meta-Control-x | |
\n | 0x0a | Carácter de nueva línea |
\nnn | Representación octal, donde el rango de n es 0.7 | |
\r | 0x0d | Carácter de retorno de carro |
\s | 0x20 | Carácter de espacio |
\t | 0x09 | Tabulación |
\v | 0x0b | Tabulación vertical |
\x | Carácter x | |
\xnn | Representación hexadecimal, donde el rango de n es 0.9、 a.f o A.F |
El conjunto de caracteres predeterminado de Ruby es ASCII, los caracteres se pueden representar con un solo byte. Si utiliza UTF-8 u otros conjuntos de caracteres modernos, los caracteres pueden ser representados por un hasta cuatro bytes.
Puede usar $KCODE al principio del programa, como se muestra a continuación:
$KCODE = 'u'
A continuación se muestran los posibles valores de $KCODE.
Codificación | Descripción |
---|---|
a | ASCII (igual que none). Esto es el valor predeterminado. |
e | EUC. |
n | None (igual que ASCII). |
u | UTF-8. |
Necesitamos un ejemplo de String para llamar a los métodos de String. A continuación se muestra cómo crear un objeto String de ejemplo:
new [String.new(str="")]
Esto devolverá un objeto que contiene str El nuevo objeto de cadena de copia. Ahora, utilice 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 Conecta other_str a str. |
4 | str << obj 连接一个对象到字符串。如果对象是范围为 0.255 之间的固定数字 Fixnum,则它会被转换为一个字符。把它与 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 根据正则表达式模式 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 不区分大小写的字符串比较。 |
12 | str.center 居中字符串。 |
13 | str.chomp 从字符串末尾移除记录分隔符($/),通常是 \n。如果没有记录分隔符,则不进行任何操作。 |
14 | str.chomp! 与 chomp 相同,但是 str 会发生变化并返回。 |
15 | str.chop Elimina el último carácter de str. |
16 | str.chop! Es igual a chop, pero str cambia y se devuelve. |
17 | str.concat(other_str) Conecta other_str a str. |
18 | str.count(str, ...) Cuenta uno o más conjuntos de caracteres. Si hay varios conjuntos de caracteres, se cuenta la intersección de estos conjuntos. |
19 | str.crypt(other_str) Aplica un hash de encriptación unidireccional a str. El parámetro es una cadena de dos caracteres, cada carácter en el rango de a.z, A.Z, 0.9、 . o /. |
20 | str.delete(other_str, ...) Devuelve una copia de str, eliminando todos los caracteres en la intersección de los argumentos. |
21 | str.delete!(other_str, ...) Es igual a delete, pero str cambia y se devuelve. |
22 | str.downcase Devuelve una copia de str, reemplazando todas las letras mayúsculas con minúsculas. |
23 | str.downcase! Es igual a downcase, pero str cambia y se devuelve. |
24 | str.dump Devuelve una versión de str, en la que todos los caracteres no impresos se reemplazan con el símbolo \nnn y todos los caracteres especiales se escapan. |
25 | str.each(separator=$/) { |substr| block } Usa un parámetro como separador de registros (por defecto es $/Separa str, pasando cada subcadena al bloque proporcionado. |
26 | str.each_byte { |fixnum| block } Pasa cada byte de str al bloque, devolviendo cada byte en notación decimal. |
27 | str.each_line(separator=$/) { |substr| block } Usa un parámetro como separador de registros (por defecto es $/Separa str, pasando cada subcadena al bloque proporcionado. |
28 | str.empty? Si str está vacío (es decir, la longitud es 0), devuelve true. |
29 | str.eql?(other) Si dos cadenas tienen la misma longitud y contenido, estas cadenas son iguales. |
30 | str.gsub(pattern, replacement) [o] str.gsub(pattern) { |match| block } Devuelve una copia de str, reemplazando todas las apariciones de pattern con el valor de replacement o block. pattern generalmente es una expresión regular Regexp; si es una cadena String, no se interpretan caracteres de metaexpresión regular (es decir,)/\d/ Coincide con un número, pero '\d' coincidirá con una barra invertida seguida de 'd'). |
31 | str[entero] [o] str[entero, entero] [o] str[rango] [o] str[patrón] [o] str[patrón, entero] [o] str[other_str] Usa los siguientes parámetros para referirse a str: un parámetro de tipo Fixnum devuelve la codificación de caracteres del Fixnum; dos parámetros de tipo Fixnum devuelven una subcadena desde el desplazamiento (el primer Fixnum) hasta la longitud (el segundo Fixnum); un rango devuelve una subcadena dentro de ese rango; un patrón devuelve la parte coincidente de la cadena; un patrón con Fixnum devuelve los datos coincidentes en la posición Fixnum; un otro_str devuelve la subcadena que coincide con other_str. Un Fixnum negativo desde el final de la cadena -1 Comienza. |
32 | str[entero] = entero [o] str[entero] = new_str [o] str[entero, entero] = new_str [o] str[rango] = unaCadena [o]
str[expresión] = new_str [o] str[expresión, entero] = new_str [o] str[other_str] = new_str ] Reemplaza toda la cadena o parte de la cadena. Es sinónimo de slice!. |
33 | str.gsub!(patrón, reemplazo) [o] str.gsub!(patrón) { |coincidencia| bloque } Ejecuta el reemplazo de String#gsub, devuelve str, si no se realiza ningún reemplazo devuelve nil. |
34 | str.hash Devuelve un hash basado en la longitud y el contenido de la cadena. |
35 | str.hex Toma los caracteres iniciales de str como una cadena de dígitos hexadecimales (un símbolo opcional y un 0x opcional), y devuelve el número correspondiente. Si hay un error, devuelve cero. |
36 | str.include? other_str [o] str.include? fixnum Si str contiene la cadena o caracter dado, devuelve true. |
37 | str.index(substring [, offset]) [or] str.index(fixnum [, offset]) [or] str.index(regexp [, offset]) Devuelve la primera aparición del subcadena, carácter (fixnum) o patrón (regexp) en str. Si no se encuentra, devuelve nil. Si se proporciona un segundo parámetro, se especifica la posición de inicio de la búsqueda en la cadena. |
38 | str.insert(index, other_str) Inserta other_str antes del carácter en la posición dada, modifica str. Un índice negativo comienza a contar desde el final de la cadena y se inserta después del carácter dado. La intención es comenzar a insertar una cadena en la posición dada. |
39 | str.inspect Devuelve la versión imprimible de str, con caracteres especiales escapados. |
40 | str.intern [or] str.to_sym Devuelve el símbolo correspondiente a str, si no existe crea el símbolo. |
41 | str.length Devuelve la longitud de str. Compárala con size. |
42 | str.ljust(integer, padstr=' ') Si integer es mayor que la longitud de str, devuelve una nueva cadena de longitud integer, alineada a la izquierda con str y rellenada con padstr. De lo contrario, devuelve str. |
43 | str.lstrip Devuelve una copia de str, eliminando los espacios en blanco al inicio. |
44 | str.lstrip! Elimina los espacios en blanco al inicio de str, si no hay cambios devuelve nil. |
45 | str.match(pattern) Si pattern no es una expresión regular, convierte pattern en una expresión regular Regexp y luego llama a su método de coincidencia en str. |
46 | str.oct Toma el carácter de inicio de str como una cadena de número decimal (un símbolo opcional), y devuelve el número correspondiente. Si la conversión falla, devuelve 0. |
47 | str.replace(other_str) Reemplaza el contenido de str con el valor correspondiente de other_str. |
48 | str.reverse Devuelve una nueva cadena, que es el inverso de str. |
49 | str.reverse! Invierte str, str cambia y devuelve. |
50 | str.rindex(substring [, fixnum]) [or] str.rindex(fixnum [, fixnum]) [or] str.rindex(regexp [, fixnum]) Devuelve la última aparición del subcadena, carácter (fixnum) o patrón (regexp) en str. Si no se encuentra, devuelve nil. Si se proporciona un segundo parámetro, se especifica la posición en la que finalizar la búsqueda en la cadena. Los caracteres más allá de este punto no se considerarán. |
51 | str.rjust(entero, padstr=' ') Si el entero es mayor que la longitud de str, devuelve una nueva cadena de longitud entera, alineada a la derecha en str y con padstr como relleno. De lo contrario, devuelve str. |
52 | str.rstrip Devuelve una copia de str, eliminando los espacios en blanco al final. |
53 | str.rstrip! Elimina los espacios en blanco al final de str, y si no hay cambios, devuelve nil. |
54 | str.scan(pattern) [o] str.scan(pattern) { |match, ...| bloque } Ambas formas coinciden con el patrón (puede ser un expresión regular Regexp o una cadena String) recorren str. Por cada coincidencia, se genera un resultado, que se agrega al array de resultados o se pasa al bloque. Si el patrón no contiene grupos, cada resultado independiente está compuesto por la cadena coincidente y $&. Si el patrón contiene grupos, cada resultado independiente es un array que contiene cada entrada del grupo. |
55 | str.slice(fixnum) [o] str.slice(fixnum, fixnum) [o] str.slice(range) [o] str.slice(regexp) [o] str.slice(regexp, fixnum) [o] str.slice(other_str) Ver str[fixnum], etc. str.slice!(fixnum) [o] str.slice!(fixnum, fixnum) [o] str.slice!(range) [o] str.slice!(regexp) [o] str.slice!(other_str) Elimina la parte especificada de str y devuelve la parte eliminada. Si el valor está fuera de rango, se generará un IndexError si el parámetro tiene la forma de Fixnum. Si el parámetro tiene la forma de Range, se generará un RangeError. Si el parámetro es de tipo Regexp o String, se ignorará la acción. |
56 | str.split(pattern=$;, [limit]) Splits str into substrings based on the delimiter and returns an array of these substrings. If pattern is a string String, then it will be used as a delimiter when splitting str. If pattern is a single space, then str is split based on spaces, leading spaces and consecutive space characters will be ignored. If pattern is a regular expression Regexp, then str is split at the places where pattern matches. When pattern matches a zero-length string, str is split into individual characters. is omitted pattern parameter, then the value of $; is used. If $; is nil (the default), str is split based on spaces, as if the space ` ` was specified as the delimiter. is omitted limit If limit is a positive number, it returns the maximum number of fields (if limit is 1Returns the entire string as the only entry in the array. If limit is a negative number, the number of returned fields is not limited, and trailing null fields are not suppressed. |
57 | str.squeeze([other_str]*) Builds a series of characters from the other_str parameter using the program described in String#count. Returns a new string where the same characters appearing in the set are replaced with a single character. If no parameter is given, all identical characters are replaced with a single character. |
58 | str.squeeze!([other_str]*) Similar to squeeze, but str will be modified and returned, and nil will be returned if there is no change. |
59 | str.strip Returns a copy of str with leading and trailing spaces removed. |
60 | str.strip! Removes leading and trailing spaces from str, and returns nil if there is no change. |
61 | str.sub(pattern, replacement) [or] str.sub(pattern) { |match| block } Returns a copy of str with the first occurrence of pattern replaced by replacement or the value of block. pattern is usually a regular expression Regexp; if it is a string String, then no regular expression metacharacters are interpreted. |
62 | str.sub!(pattern, replacement) [or] str.sub!(patrón) { |coincidencia| bloque } Ejecuta el reemplazo de String#sub y devuelve str, o devuelve nil si no se realiza ningún reemplazo. |
63 | str.succ [o] str.next Devuelve el heredado de str. |
64 | str.succ! [o] str.next! Equivalente a String#succ, pero str cambia y se devuelve. |
65 | str.sum(n=16) Devuelve el n-checksum de bits, donde n es un parámetro Fixnum opcional, por defecto 16El resultado es simplemente la suma de los valores binarios de cada carácter de str, con 2n - 1 Es un checksum modular. No es un checksum particularmente bueno. |
66 | str.swapcase Devuelve una copia de str, convirtiendo todas las letras mayúsculas en minúsculas y viceversa. |
67 | str.swapcase! Equivalente a String#swapcase, pero str cambia y se devuelve, o se devuelve nil si no hay cambios. |
68 | str.to_f Devuelve el resultado de interpretar los caracteres iniciales de str como número flotante. Los caracteres adicionales al final del número válido se ignoran. Si no hay número válido al principio de str, se devuelve 0.0. Este método no genera excepciones. |
69 | str.to_i(base=10) Devuelve la interpretación de los caracteres iniciales de str como base numérica (base 2Y 8Y 10 O 16El resultado. Los caracteres adicionales al final del número válido se ignoran. Si no hay número válido al principio de str, se devuelve 0. Este método no genera excepciones. |
70 | str.to_s [o] str.to_str Devuelve el valor recibido. |
71 | str.tr(from_str, to_str) Devuelve una copia de str, reemplazando los caracteres de from_str con los caracteres correspondientes en to_str. Si to_str es más corto que from_str, se rellena con el último carácter. Ambos strings pueden usar c1.c2 Símbolo que representa el rango de caracteres. Si from_str comienza con ^, significa todos los caracteres excepto los enumerados. |
72 | str.tr!(from_str, to_str) Equivalente a String#tr, pero str cambia y se devuelve, o se devuelve nil si no hay cambios. |
73 | str.tr_s(from_str, to_str) Procesa str según las reglas descritas en String#tr y luego elimina los caracteres repetidos que pueden afectar la traducción. |
74 | str.tr_s!(from_str, to_str) Es equivalente a String#tr_s, pero str cambiará y se devolverá, o se devolverá nil si no hay cambios. |
75 | str.unpack(format) Descodifique str (puede contener datos binarios) según la cadena de formato, devolviendo un array de cada valor extraído. Los caracteres de formato son una serie de instrucciones de un solo carácter. Después de cada instrucción puede seguirse un número, que indica la cantidad de veces que se debe repetir la instrucción. El asterisco (*Se utilizarán todos los elementos restantes. La instrucción sSiIlL puede seguirse por un guión bajo (_) para usar el tamaño de plataforma local específico del tipo, de lo contrario se utilizará un tamaño consistente independiente de la plataforma. Los espacios en el cadenas de formato se ignorarán. |
76 | str.upcase Retorne una copia de str, todas las letras minúsculas se reemplazarán por mayúsculas. La operación es insensible al entorno, solo se afectan los caracteres a-z. |
77 | str.upcase! Cambie el contenido de str a mayúsculas, si no hay cambios, devuelva nil. |
78 | str.upto(other_str) { |s| block } Recorra valores contiguos, comenzando en str, terminando en other_str (inclusivo), alternando cada valor para block. El método String#succ se utiliza para generar cada valor. |
La tabla a continuación enumera las instrucciones de descompresión del método String#unpack.
Instrucción | Retornar | Descripción |
---|---|---|
A | Cadena | Elimine los null y los espacios en blanco al final. |
a | Cadena | Cadena. |
B | Cadena | Extraiga un bit de cada carácter (primero el bit más significativo). |
b | Cadena | Extraiga un bit de cada carácter (primero el bit menos significativo). |
C | Número entero | Extraiga un carácter como un entero sin signo. |
c | Número entero | Extraiga un carácter como un entero. |
D, d | Float | Tome los caracteres de longitud sizeof(double) como doubles nativos. |
E | Float | Tome los caracteres de longitud sizeof(double) como doubles en el orden de bytes littleendian. |
e | Float | Tome los caracteres de longitud sizeof(float) como floats en el orden de bytes littleendian. |
F, f | Float | Tome los caracteres de longitud sizeof(float) como floats nativos. |
G | Float | Tome los caracteres de longitud sizeof(double) como doubles en el orden de bytes de red. |
g | Float | Tome los caracteres de longitud sizeof(float) como floats en el orden de bytes de red. |
H | Cadena | Extraer hexadecimal de cada carácter (primero el bit más significativo). |
h | Cadena | Extraer hexadecimal de cada carácter (primero el bit menos significativo). |
I | Entero | Tomar caracteres consecutivos de longitud sizeof(int) (modificados por _) como entero nativo. |
i | Entero | Tomar caracteres consecutivos de longitud sizeof(int) (modificados por _) como entero nativo y signado. |
L | Entero | Tomar cuatro (modificados por _) caracteres consecutivos como long entero nativo y sin signo. |
l | Entero | Tomar cuatro (modificados por _) caracteres consecutivos como long entero nativo y signado. |
M | Cadena | Imprimir referencias. |
m | Cadena | Base64 Codificación. |
N | Entero | Tomar cuatro caracteres como long sin signo con orden de bytes de red. |
n | Número entero | Tomar dos caracteres como short sin signo con orden de bytes de red. |
P | Cadena | ) caracteres de longitud como puntero, y regresar \emph{len} caracteres desde la posición de referencia. *) caracteres de longitud como puntero, y regresar \emph{len} caracteres desde la posición de referencia. |
p | Cadena | ) caracteres de longitud como puntero, y regresar \emph{len} caracteres desde la posición de referencia. *Tomar sizeof(char |
) caracteres de longitud como un puntero a un carácter de terminación de cadena. | Entero | Tomar ocho caracteres como quad word sin signo (64 bits). |
q | Entero | Tomar ocho caracteres como quad word (64 bits). |
S | Número entero | Tomar dos (si se usa _ entonces diferente) caracteres consecutivos como short sin signo con orden de bytes nativo. |
s | Número entero | Tomar dos (si se usa _ entonces diferente) caracteres consecutivos como short con orden de bytes nativo y signado. |
U | Entero | UTF-8 Carácter, como entero sin signo. |
u | Cadena | Codificación UU. |
V | Número entero | Tomar cuatro caracteres como little-Corte byte ordenado endian sin signo long. |
v | Número entero | Tomar dos caracteres como little-Corte byte ordenado endian sin signo short. |
w | Entero | Entero comprimido BER. |
X | Saltar un carácter hacia atrás. | |
x | Saltar un carácter hacia adelante. | |
Z | Cadena | Y * Usar juntos, eliminar los null al final hasta el primer null. |
@ | Saltar la cantidad de bytes especificada por el parámetro length. |
Intente el siguiente ejemplo, descomprimir varios datos.
"abc \0\0abc \0\0".unpack('A6Z6#=> ["abc", "abc "] "abc \0\0".unpack('a3a3#=> ["abc", " \000\000"] "abc \0abc \0".unpack('Z')*Z* "aa".unpack('b')8B810000110", "01100001"] "aaa".unpack('h')2H2c') => ['"']16", "61" 97] "\xfe\xff\xfe\xff".unpack('sS') => [-2, 65534] "now=20is".unpack('M')* "whole".unpack('xax') => ['now is']2aX2aX1aX2a') => ['h', 'e', 'l', 'l', 'o']