Ruby - Cuerdas
Un objeto String en Ruby contiene y manipula una secuencia arbitraria de uno o más bytes, que generalmente representan caracteres que representan el lenguaje humano.
Los literales de cadena más simples se encierran entre comillas simples (el carácter de apóstrofo). El texto entre comillas es el valor de la cadena:
'This is a simple Ruby string literal'
Si necesita colocar un apóstrofe dentro de un literal de cadena entre comillas simples, preceda con una barra invertida, para que el intérprete de Ruby no crea que termina la cadena -
'Won\'t you read O\'Reilly\'s book?'
La barra invertida también funciona para escapar de otra barra invertida, de modo que la segunda barra invertida no se interprete como un carácter de escape.
A continuación se muestran las características de Ruby relacionadas con cadenas.
Sustitución de expresiones
La sustitución de expresiones es un medio de incrustar el valor de cualquier expresión de Ruby en una cadena usando # {y} -
#!/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 }."
Esto producirá el siguiente resultado:
The value of x is 12.
The sum of x and y is 48.
The average was 40.
Cadenas delimitadas generales
Con cadenas delimitadas en general, puede crear cadenas dentro de un par de caracteres delimitadores arbitrarios aunque coincidentes, por ejemplo,!, (, {, <, Etc., precedidos por un carácter de porcentaje (%). Q, qyx tienen significados especiales . Las cadenas delimitadas en general pueden ser:
%{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`
Personajes de escape
NOTE- En una cadena entre comillas dobles, se interpreta un carácter de escape; en una cadena entre comillas simples, se conserva un carácter de escape.
Notación de barra invertida | Carácter hexadecimal | Descripción |
---|---|---|
\un | 0x07 | Campana o alerta |
\segundo | 0x08 | Retroceso |
\ cx | Control-x | |
\ Cx | Control-x | |
\mi | 0x1b | Escapar |
\F | 0x0c | Formfeed |
\ M- \ Cx | Meta-Control-x | |
\norte | 0x0a | Nueva línea |
\ nnn | Notación octal, donde n está en el rango 0,7 | |
\ r | 0x0d | Retorno de carro |
\ s | 0x20 | Espacio |
\ t | 0x09 | Lengüeta |
\ v | 0x0b | Pestaña vertical |
\X | Personaje x | |
\ xnn | Notación hexadecimal, donde n está en el rango 0,9, af o AF |
Codificación de caracteres
El juego de caracteres predeterminado para Ruby es ASCII, cuyos caracteres pueden estar representados por bytes individuales. Si usa UTF-8 u otro conjunto de caracteres moderno, los caracteres se pueden representar en uno a cuatro bytes.
Puede cambiar su juego de caracteres usando $ KCODE al comienzo de su programa, así:
$KCODE = 'u'
No Señor. | Código y descripción |
---|---|
1 | a ASCII (igual que ninguno). Este es el predeterminado. |
2 | e EUC. |
3 | n Ninguno (igual que ASCII). |
4 | u UTF-8. |
Métodos integrados de cadena
Necesitamos tener una instancia del objeto String para llamar a un método String. A continuación se muestra la forma de crear una instancia de objeto String:
new [String.new(str = "")]
Esto devolverá un nuevo objeto de cadena que contiene una copia de str . Ahora, usando el objeto str , todos podemos usar cualquier método de instancia disponible. Por ejemplo
#!/usr/bin/ruby
myStr = String.new("THIS IS TEST")
foo = myStr.downcase
puts "#{foo}"
Esto producirá el siguiente resultado:
this is test
No Señor. | Métodos y descripción |
---|---|
1 | str % arg Formatea una cadena usando una especificación de formato. arg debe ser una matriz si contiene más de una sustitución. Para obtener información sobre la especificación de formato, consulte sprintf en "Módulo del núcleo". |
2 | str * integer Devuelve una nueva cadena que contiene un número entero por str. En otras palabras, str se repite en números enteros. |
3 | str + other_str Concatena other_str con str. |
4 | str << obj Concatena un objeto a str. Si el objeto es un Fixnum en el rango 0.255, se convierte en un carácter. Compárelo con concat. |
5 | str <=> other_str Compara str con other_str, devolviendo -1 (menor que), 0 (igual) o 1 (mayor que). La comparación distingue entre mayúsculas y minúsculas. |
6 | str == obj Prueba str y obj para la igualdad. Si obj no es una cadena, devuelve falso; devuelve verdadero si str <=> obj devuelve 0. |
7 | str =~ obj Hace coincidir str con un patrón de expresión regular obj. Devuelve la posición donde comienza el partido; de lo contrario, falso. |
8 | str.capitalize Capitaliza una cadena. |
9 | str.capitalize! Igual que capitalizar, pero los cambios se realizan en su lugar. |
10 | str.casecmp Hace una comparación de cadenas que no distingue entre mayúsculas y minúsculas. |
11 | str.center Centra una cuerda. |
12 | str.chomp Elimina el separador de registros ($ /), generalmente \ n, del final de una cadena. Si no existe un separador de registros, no hace nada. |
13 | str.chomp! Igual que chomp, pero los cambios se realizan en su lugar. |
14 | str.chop Elimina el último carácter de str. |
15 | str.chop! Igual que cortar, pero los cambios se realizan en su lugar. |
dieciséis | str.concat(other_str) Concatena other_str con str. |
17 | str.count(str, ...) Cuenta uno o más conjuntos de caracteres. Si hay más de un conjunto de caracteres, cuenta la intersección de esos conjuntos |
18 | str.crypt(other_str) Aplica un hash criptográfico unidireccional a str. El argumento es la cadena salt, que debe tener dos caracteres, cada carácter en el rango az, AZ, 0.9,. o /. |
19 | str.delete(other_str, ...) Devuelve una copia de str con todos los caracteres en la intersección de sus argumentos eliminados. |
20 | str.delete!(other_str, ...) Igual que eliminar, pero los cambios se realizan en su lugar. |
21 | str.downcase Devuelve una copia de str con todas las letras mayúsculas reemplazadas por minúsculas. |
22 | str.downcase! Igual que downcase, pero los cambios se realizan en su lugar. |
23 | str.dump Devuelve una versión de str con todos los caracteres no imprimibles reemplazados por la notación \ nnn y todos los caracteres especiales escapados. |
24 | str.each(separator = $/) { |substr| block } Divide str usando el argumento como separador de registros ($ / por defecto), pasando cada subcadena al bloque proporcionado. |
25 | str.each_byte { |fixnum| block } Pasa cada byte de str al bloque, devolviendo cada byte como una representación decimal del byte. |
26 | str.each_line(separator=$/) { |substr| block } Divide str usando el argumento como separador de registros ($ / por defecto), pasando cada subcadena al bloque proporcionado. |
27 | str.empty? Devuelve verdadero si str está vacío (tiene una longitud cero). |
28 | str.eql?(other) Dos cadenas son iguales si tienen la misma longitud y contenido. |
29 | str.gsub(pattern, replacement) [or] str.gsub(pattern) { |match| block } Devuelve una copia de str con todas las apariciones del patrón reemplazado con reemplazo o el valor del bloque. El patrón será típicamente un Regexp; si es una cadena, no se interpretarán metacaracteres de expresión regular (es decir, / \ d / coincidirá con un dígito, pero '\ d' coincidirá con una barra invertida seguida de una 'd') |
30 | str[fixnum] [or] str[fixnum,fixnum] [or] str[range] [or] str[regexp] [or] str[regexp, fixnum] [or] str[other_str] Hace referencia a str, utilizando los siguientes argumentos: one Fixnum, devuelve un código de carácter en fixnum; dos Fixnums, devuelve una subcadena que comienza en un desplazamiento (primer fixnum) hasta la longitud (segundo fixnum); rango, devuelve una subcadena en el rango; regexp devuelve una parte de la cadena coincidente; regexp con fixnum, devuelve datos coincidentes en fixnum; other_str devuelve una subcadena que coincide con other_str. Un Fixnum negativo comienza al final de la cadena con -1. |
31 | 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 ] Reemplazar (asignar) todo o parte de una cadena. Sinónimo de slice !. |
32 | str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match|block } Realiza las sustituciones de String # gsub en su lugar, devolviendo str, o nil si no se realizaron sustituciones. |
33 | str.hash Devuelve un hash basado en la longitud y el contenido de la cadena. |
34 | str.hex Trata los caracteres iniciales de str como una cadena de dígitos hexadecimales (con un signo opcional y un 0x opcional) y devuelve el número correspondiente. Se devuelve cero en caso de error. |
35 | str.include? other_str [or] str.include? fixnum Devuelve verdadero si str contiene la cadena o el carácter dados. |
36 | str.index(substring [, offset]) [or] str.index(fixnum [, offset]) [or] str.index(regexp [, offset]) Devuelve el índice de la primera aparición de la subcadena, carácter (fixnum) o patrón (regexp) en str. Devuelve nulo si no se encuentra. Si el segundo parámetro está presente, especifica la posición en la cadena para comenzar la búsqueda. |
37 | str.insert(index, other_str) Inserta other_str antes del carácter en el índice dado, modificando str. Los índices negativos cuentan desde el final de la cadena y se insertan después del carácter dado. La intención es insertar una cadena para que comience en el índice dado. |
38 | str.inspect Devuelve una versión imprimible de str, con caracteres especiales de escape. |
39 | str.intern [or] str.to_sym Devuelve el Símbolo correspondiente a str, creando el símbolo si no existía previamente. |
40 | str.length Devuelve la longitud de str. Compare el tamaño. |
41 | str.ljust(integer, padstr = ' ') Si integer es mayor que la longitud de str, devuelve una nueva String de longitud integer con str justificada a la izquierda y rellenada con padstr; de lo contrario, devuelve str. |
42 | str.lstrip Devuelve una copia de str sin los espacios en blanco iniciales. |
43 | str.lstrip! Elimina los espacios en blanco iniciales de str, devolviendo nil si no se realizó ningún cambio. |
44 | str.match(pattern) Convierte el patrón en una Regexp (si aún no lo es), luego invoca su método de coincidencia en str. |
45 | str.oct Trata los caracteres iniciales de str como una cadena de dígitos octales (con un signo opcional) y devuelve el número correspondiente. Devuelve 0 si falla la conversión. |
46 | str.replace(other_str) Reemplaza el contenido y la contaminación de str con los valores correspondientes en other_str. |
47 | str.reverse Devuelve una nueva cadena con los caracteres de str en orden inverso. |
48 | str.reverse! Invierte str en su lugar. |
49 | str.rindex(substring [, fixnum]) [or] str.rindex(fixnum [, fixnum]) [or] str.rindex(regexp [, fixnum]) Devuelve el índice de la última aparición de la subcadena, carácter (fixnum) o patrón (regexp) en str. Devuelve nulo si no se encuentra. Si el segundo parámetro está presente, especifica la posición en la cadena para finalizar la búsqueda. Los caracteres más allá de este punto no serán considerados. |
50. | str.rjust(integer, padstr = ' ') Si integer es mayor que la longitud de str, devuelve una nueva String de longitud integer con str justificada a la derecha y rellenada con padstr; de lo contrario, devuelve str. |
51 | str.rstrip Devuelve una copia de str sin los espacios en blanco finales. |
52 | str.rstrip! Elimina los espacios en blanco finales de str, devolviendo nil si no se realizó ningún cambio. |
53 | str.scan(pattern) [or] str.scan(pattern) { |match, ...| block } Ambas formas iteran a través de str, haciendo coincidir el patrón (que puede ser una Regexp o una String). Para cada coincidencia, se genera un resultado y se agrega a la matriz de resultados o se pasa al bloque. Si el patrón no contiene grupos, cada resultado individual consta de la cadena coincidente, $ &. Si el patrón contiene grupos, cada resultado individual es en sí mismo una matriz que contiene una entrada por grupo. |
54 | str.slice(fixnum) [or] str.slice(fixnum, fixnum) [or] str.slice(range) [or] str.slice(regexp) [or] str.slice(regexp, fixnum) [or] str.slice(other_str) See str[fixnum], etc. str.slice!(fixnum) [or] str.slice!(fixnum, fixnum) [or] str.slice!(range) [or] str.slice!(regexp) [or] str.slice!(other_str) Elimina la parte especificada de str y devuelve la parte eliminada. Los formularios que toman un Fixnum generarán un IndexError si el valor está fuera de rango; el formulario Range generará un RangeError, y los formularios Regexp y String ignorarán silenciosamente la asignación. |
55 | str.split(pattern = $, [limit]) Divide str en subcadenas según un delimitador y devuelve una matriz de estas subcadenas. Si el patrón es una cadena, entonces su contenido se usa como delimitador al dividir str. Si el patrón es un espacio único, str se divide en espacios en blanco, con espacios en blanco iniciales y se ignoran las series de caracteres de espacios en blanco contiguos. Si el patrón es una expresión regular, str se divide donde el patrón coincide. Siempre que el patrón coincide con una cadena de longitud cero, str se divide en caracteres individuales. Si se omite el patrón , el valor de $; se utiliza. Si $; es nil (que es el valor predeterminado), str se divide en espacios en blanco como si se especificara ``. Si se omite el parámetro de límite , se suprimen los campos nulos finales. Si el límite es un número positivo, como máximo se devolverá ese número de campos (si el límite es 1, la cadena completa se devuelve como la única entrada en una matriz). Si es negativo, no hay límite para el número de campos devueltos y los campos nulos finales no se suprimen. |
56 | str.squeeze([other_str]*) Crea un conjunto de caracteres a partir de los parámetros other_str utilizando el procedimiento descrito para String # count. Devuelve una nueva cadena donde las ejecuciones del mismo carácter que ocurren en este conjunto se reemplazan por un solo carácter. Si no se proporcionan argumentos, todas las ejecuciones de caracteres idénticos se reemplazan por un solo carácter. |
57 | str.squeeze!([other_str]*) Aprieta str en su lugar, devolviendo str o nil si no se realizaron cambios. |
58 | str.strip Devuelve una copia de str sin los espacios en blanco iniciales y finales. |
59 | str.strip! Elimina los espacios en blanco iniciales y finales de str. Devuelve nil si str no se modificó. |
60 | str.sub(pattern, replacement) [or] str.sub(pattern) { |match| block } Devuelve una copia de str con la primera aparición del patrón reemplazado con reemplazo o el valor del bloque. El patrón será típicamente un Regexp; si es una cadena, no se interpretarán metacaracteres de expresión regular. |
61 | str.sub!(pattern, replacement) [or] str.sub!(pattern) { |match| block } Realiza las sustituciones de String # sub en su lugar, devolviendo str o nil si no se realizaron sustituciones. |
62 | str.succ [or] str.next Devuelve el sucesor de str. |
63 | str.succ! [or] str.next! Equivalente a String # succ, pero modifica el receptor en su lugar. |
64 | str.sum(n = 16) Devuelve una suma de comprobación básica de n bits de los caracteres en str, donde n es el parámetro Fixnum opcional, con un valor predeterminado de 16. El resultado es simplemente la suma del valor binario de cada carácter en str módulo 2n - 1. Este no es un parámetro particularmente buena suma de control. |
sesenta y cinco | str.swapcase Devuelve una copia de str con caracteres alfabéticos en mayúscula convertidos a minúsculas y caracteres en minúsculas convertidos a mayúsculas. |
66 | str.swapcase! Equivalente a String # swapcase, pero modifica el receptor en su lugar, devolviendo str o nil si no se realizaron cambios. |
67 | str.to_f > Devuelve el resultado de interpretar los caracteres iniciales en str como un número de punto flotante. Se ignoran los caracteres extraños después del final de un número válido. Si no hay un número válido al comienzo de str, se devuelve 0.0. Este método nunca genera una excepción. |
68 | str.to_i(base = 10) Devuelve el resultado de interpretar los caracteres iniciales en str como una base entera (base 2, 8, 10 o 16). Se ignoran los caracteres extraños después del final de un número válido. Si no hay un número válido al comienzo de str, se devuelve 0. Este método nunca genera una excepción. |
69 | str.to_s [or] str.to_str Devuelve el receptor. |
70 | str.tr(from_str, to_str) Devuelve una copia de str con los caracteres de from_str reemplazados por los caracteres correspondientes de to_str. Si to_str es más corto que from_str, se rellena con su último carácter. Ambas cadenas pueden usar la notación c1.c2 para denotar rangos de caracteres, y from_str puede comenzar con ^, que denota todos los caracteres excepto los enumerados. |
71 | str.tr!(from_str, to_str) Traduce str en su lugar, usando las mismas reglas que String # tr. Devuelve str, o nil si no se realizaron cambios. |
72 | str.tr_s(from_str, to_str) Procesa una copia de str como se describe en String # tr, luego elimina los caracteres duplicados en las regiones que fueron afectadas por la traducción. |
73 | str.tr_s!(from_str, to_str) Realiza el procesamiento de String # tr_s en str en su lugar, devolviendo str o nil si no se realizaron cambios. |
74 | str.unpack(format) > Decodifica str (que puede contener datos binarios) de acuerdo con la cadena de formato, devolviendo una matriz de cada valor extraído. La cadena de formato consta de una secuencia de directivas de un solo carácter, resumidas en la Tabla 18. Cada directiva puede ir seguida de un número, que indica el número de veces que se repetirá con esta directiva. Un asterisco (*) consumirá todos los elementos restantes. Las directivas sSiIlL pueden ir seguidas de un guión bajo (_) para utilizar el tamaño nativo de la plataforma subyacente para el tipo especificado; de lo contrario, utiliza un tamaño coherente independiente de la plataforma. Los espacios se ignoran en la cadena de formato. |
75 | str.upcase Devuelve una copia de str con todas las letras minúsculas reemplazadas por sus contrapartes en mayúscula. La operación es insensible a la configuración regional. Solo los caracteres de la A a la Z se ven afectados. |
76 | str.upcase! Cambia el contenido de str a mayúsculas y devuelve nulo si no se realizan cambios. |
77 | str.upto(other_str) { |s| block } Itera a través de valores sucesivos, comenzando en str y terminando en other_str inclusive, pasando cada valor a su vez al bloque. El método String # succ se utiliza para generar cada valor. |
Directivas de desempaquetado de cadenas
Directiva | Devoluciones | Descripción |
---|---|---|
UN | Cuerda | Con nulos finales y espacios eliminados. |
un | Cuerda | Cuerda. |
segundo | Cuerda | Extrae bits de cada carácter (el bit más significativo primero). |
segundo | Cuerda | Extrae bits de cada carácter (primero el bit menos significativo). |
C | Fixnum | Extrae un carácter como un entero sin signo. |
C | Fixnum | Extrae un carácter como un número entero. |
D, d | Flotador | Trata el tamaño de los caracteres (dobles) como un doble nativo. |
mi | Flotador | Trata el tamaño de los caracteres (dobles) como un doble en orden de bytes littleendian. |
mi | Flotador | Trata el tamaño de los caracteres (flotantes) como un flotante en orden de bytes littleendian. |
F, f | Flotador | Trata el tamaño de los caracteres (flotantes) como un flotante nativo. |
GRAMO | Flotador | Trata el tamaño de los caracteres (dobles) como un doble en el orden de bytes de la red. |
gramo | Cuerda | Trata el tamaño de los caracteres (flotantes) como un flotante en el orden de bytes de la red. |
H | Cuerda | Extrae nibbles hexadecimales de cada carácter (el bit más significativo primero) |
h | Cuerda | Extrae nibbles hexadecimales de cada carácter (el bit menos significativo primero). |
yo | Entero | Trata sizeof (int) (modificado por _) caracteres sucesivos como un entero nativo sin signo. |
yo | Entero | Trata sizeof (int) (modificado por _) caracteres sucesivos como un entero nativo con signo. |
L | Entero | Trata cuatro caracteres sucesivos (modificados por _) como un entero largo nativo sin signo. |
l | Entero | Trata cuatro caracteres sucesivos (modificados por _) como un entero largo nativo con signo. |
METRO | Cuerda | Citado-imprimible. |
metro | Cuerda | Codificado en Base64. |
norte | Entero | Trata cuatro caracteres como una longitud sin firmar en el orden de bytes de la red. |
norte | Fixnum | Trata dos caracteres como un corto sin firmar en el orden de bytes de la red. |
PAGS | Cuerda | Trata los caracteres sizeof (char *) como un puntero y devuelve \ emph {len} caracteres desde la ubicación referenciada. |
pags | Cuerda | Trata los caracteres sizeof (char *) como un puntero a una cadena terminada en nulo. |
Q | Entero | Trata ocho caracteres como una palabra cuádruple sin signo (64 bits). |
q | Entero | Trata ocho caracteres como una palabra cuádruple firmada (64 bits). |
S | Fixnum | Trata dos caracteres sucesivos (diferentes si se usan _) como un abreviado sin firmar en el orden de bytes nativo. |
s | Fixnum | Trata dos caracteres sucesivos (diferentes si se usan _) como un abreviado con signo en el orden de bytes nativo. |
U | Entero | Caracteres UTF-8 como enteros sin signo. |
tu | Cuerda | Codificado en UU. |
V | Fixnum | Trata cuatro caracteres como una longitud sin firmar en orden de bytes little-endian. |
v | Fixnum | Trata dos caracteres como un abreviado sin firmar en orden de bytes little-endian. |
w | Entero | Entero comprimido con BER. |
X | Salta un carácter hacia atrás. | |
X | Avanza un carácter. | |
Z | Cuerda | Con nulos finales eliminados hasta el primer nulo con *. |
@ | Salta al desplazamiento proporcionado por el argumento de longitud. |
Ejemplo
Pruebe el siguiente ejemplo para 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*') #=> ["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"]