Ruby Cadena (String)
El objeto String en Ruby se utiliza para almacenar o manipular secuencias de uno o más bytes.
Las cadenas de Ruby se dividen en cadenas con comillas simples (') y cadenas con comillas dobles ("); la diferencia es que las cadenas con comillas dobles pueden admitir más caracteres de escape.
Cadenas con comillas simples
La cadena más simple es la cadena con comillas simples, es decir, almacenar la cadena entre comillas simples:
Si necesita usar caracteres de comillas simples dentro de una cadena con comillas simples, entonces debe usar una barra invertida (\) dentro de la cadena con comillas simples, para que el intérprete de Ruby no considere este carácter de comilla simple como el símbolo de terminación de la cadena:
La barra invertida también puede escapar otra barra invertida, de modo que la segunda barra invertida no se interpretará como un carácter de escape.
A continuación se presentan las características relacionadas con las cadenas en Ruby.
Cadenas con comillas dobles
En las cadenas con comillas dobles podemos usar#{}el signo de almohadilla (#) y las llaves ({}) para calcular el valor de expresiones:
Incrustar variables en cadenas:
Ejemplo
Pruébalo »
El resultado de ejecutar el ejemplo anterior es:
你好 Joe, Mary 在哪?
Realizar operaciones matemáticas en cadenas:
Ejemplo
Pruébalo »
El resultado de ejecutar el ejemplo anterior es:
x 的值为 12 x + y 的值为 48 x + y + z 的平均值为 40
Ruby también admite variables de cadena introducidas con %q y %Q. %q usa las reglas de comillas simples, mientras que %Q usa las reglas de comillas dobles, seguidas de un delimitador de apertura como (!, [, {, etc.) y un delimitador de cierre como (}, ], ), etc.).
El carácter que sigue a q o Q es el delimitador. El delimitador puede ser cualquier carácter de un solo byte que no sea alfanumérico, como [, {, (, <, !, etc. La cadena se leerá hasta que se encuentre el delimitador de cierre correspondiente.
Ejemplo
Pruébalo »
El resultado de ejecutar el ejemplo anterior es:
Ruby 的字符串可以使用 '' 和 ""。 Ruby 的字符串可以使用 '' 和 ""。
Caracteres de escape
La siguiente tabla enumera los caracteres de escape o caracteres no imprimibles que se pueden escapar con el símbolo de barra invertida.
Nota:Dentro de una cadena entre comillas dobles, los caracteres de escape se interpretan. Dentro de una cadena entre comillas simples, los caracteres de escape no se interpretan y se muestran tal cual.
| Símbolo de barra invertida | Carácter hexadecimal | Descripción |
|---|---|---|
| \a | 0x07 | Carácter de alarma |
| \b | 0x08 | Tecla de retroceso |
| \cx | Control-x | |
| \C-x | Control-x | |
| \e | 0x1b | Carácter de escape |
| \f | 0x0c | Avance de página |
| \M-\C-x | Meta-Control-x | |
| \n | 0x0a | Nueva línea |
| \nnn | Notación octal, donde n está en el rango de 0 a 7. | |
| \r | 0x0d | Retorno de carro |
| \s | 0x20 | Espacio |
| \t | 0x09 | Tabulación |
| \v | 0x0b | Tabulación vertical |
| \x | Carácter x | |
| \xnn | Notación hexadecimal, donde n está en el rango de 0-9, a-f o A-F. |
Codificación de caracteres
El conjunto de caracteres predeterminado de Ruby es ASCII, y los caracteres pueden representarse con un solo byte. Si utiliza UTF-8 u otro conjunto de caracteres moderno, los caracteres pueden representarse con uno a cuatro bytes.
Puede cambiar el conjunto de caracteres al comienzo del programa usando $KCODE, 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). Este es el predeterminado. |
| e | EUC. |
| n | None (igual que ASCII). |
| u | UTF-8. |
Métodos integrados de cadenas
Necesitamos tener una instancia del objeto String para llamar a los métodos de String. A continuación se muestra la forma de crear una instancia del objeto String:
Esto devolverá un nuevo objeto de cadena que contiene unastrcopia del nuevo objeto de cadena. Ahora, usando elstrobjeto, podemos llamar a cualquier método de instancia disponible. Por ejemplo:
Ejemplo
Esto producirá el siguiente resultado:
this is test
A continuación se presentan los métodos de cadena públicos (suponiendo que str es un objeto String):
| N.º | Método y descripción |
|---|---|
| 1 | str % arg Formatea una cadena usando especificaciones de formato. Si arg contiene más de una sustitución, arg debe ser un arreglo. Para obtener más información sobre las especificaciones de formato, consulte sprintf en el 'Módulo Kernel'. |
| 2 | str * integer Devuelve una nueva cadena que contiene integer copias de str. En otras palabras, str se repite integer veces. |
| 3 | str + other_str Concatena other_str a str. |
| 4 | str << obj Concatena un objeto a la cadena. Si el objeto es un número fijo Fixnum entre 0 y 255, se convertirá en un carácter. Compárelo con concat. |
| 5 | str <=> other_str Compara str con other_str y devuelve -1 (menor que), 0 (igual) o 1 (mayor que). La comparación distingue entre mayúsculas y minúsculas. |
| 6 | str == obj Comprueba la igualdad de str y obj. Si obj no es una cadena, devuelve false; si str <=> obj devuelve 0, devuelve true. |
| 7 | str =~ obj Coincide str con el patrón de expresión regular obj. Devuelve la posición donde comienza la coincidencia; de lo contrario, devuelve false. |
| 8 | str[position] # tenga en cuenta que devuelve el código ASCII, no el carácter str[start, length] str[start..end] str[start...end] Extraer subcadenas usando índice. |
| 9 | str.capitalize Convierte la primera letra de la cadena a mayúscula y el resto a minúsculas. |
| 10 | str.capitalize! Igual que capitalize, pero capitalize! devuelve nil si no se ha modificado. |
| 11 | str.casecmp Comparación de cadenas sin distinguir entre mayúsculas y minúsculas. |
| 12 | str.center Centra la cadena. |
| 13 | str.chomp Elimina el separador de registro ($/) del final de la cadena, normalmente \n. Si no hay separador de registro, no realiza ninguna operación. |
| 14 | str.chomp! Igual que chomp, pero str se modifica y se devuelve. |
| 15 | str.chop Elimina el último carácter de str. |
| 16 | str.chop! Igual que chop, pero str se modifica y se devuelve. |
| 17 | str.concat(other_str) Concatena other_str a str. |
| 18 | str.count(str, ...) Cuenta el conjunto de caracteres en uno o más conjuntos. Si hay múltiples conjuntos, cuenta la intersección de estos conjuntos. |
| 19 | str.crypt(other_str) Aplica un hash de cifrado unidireccional a str. El argumento es una cadena de dos caracteres de longitud, cada carácter está en el rango de a-z, A-Z, 0-9, . o /. |
| 20 | str.delete(other_str, ...) Devuelve una copia de str con todos los caracteres de la intersección de los argumentos eliminados. |
| 21 | str.delete!(other_str, ...) Igual que delete, pero str se modifica y se devuelve. |
| 22 | str.downcase Devuelve una copia de str donde todas las letras mayúsculas se reemplazan por letras minúsculas. |
| 23 | str.downcase! Igual que downcase, pero str se modifica y se devuelve. |
| 24 | str.dump Devuelve una versión de str donde todos los caracteres no imprimibles se reemplazan por notación \nnn y todos los caracteres especiales se escapan. |
| 25 | str.each(separator=$/) { |substr| block } Divide str usando el argumento como separador de registro (por defecto $/) y pasa cada subcadena al bloque proporcionado. |
| 26 | str.each_byte { |fixnum| block } Pasa cada byte de str al bloque y devuelve cada byte en notación decimal. |
| 27 | str.each_line(separator=$/) { |substr| block } Divide str usando el argumento como separador de registro (por defecto $/) y pasa cada subcadena al bloque proporcionado. |
| 28 | str.empty? Devuelve true si str está vacía (es decir, tiene longitud 0). |
| 29 | str.eql?(other) Si dos cadenas tienen la misma longitud y contenido, entonces son iguales. |
| 30 | str.gsub(pattern, replacement) [or] str.gsub(pattern) { |match| block } Devuelve una copia de str donde todas las apariciones de pattern se reemplazan por replacement o por el valor del bloque. pattern suele ser una expresión regular Regexp; si es una cadena String, no se interpreta ningún metacarácter de expresión regular (es decir, /\d/ coincidirá con un dígito, pero '\d' coincidirá con una barra invertida seguida de una 'd'). |
| 31 | str[fixnum] [or] str[fixnum,fixnum] [or] str[range] [or] str[regexp] [or] str[regexp, fixnum] [or] str[other_str] Usa los siguientes argumentos para referenciar str: si el argumento es un Fixnum, devuelve el carácter codificado del fixnum; si el argumento son dos Fixnum, devuelve una subcadena que comienza en el desplazamiento (primer fixnum) y tiene la longitud (segundo fixnum); si el argumento es un range, devuelve una subcadena dentro de ese rango; si el argumento es un regexp, devuelve la parte de la cadena que coincide; si el argumento es un regexp con un fixnum, devuelve los datos de coincidencia en la posición del fixnum; si el argumento es other_str, devuelve la subcadena que coincide con other_str. Un Fixnum negativo comienza desde el final de la cadena -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 ] Reemplaza toda la cadena o parte de la cadena. Sinónimo de slice!. |
| 33 | str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match| block } Realiza las sustituciones de String#gsub, devuelve str, o nil si no se realizó ninguna sustitución. |
| 34 | str.hash Devuelve un hash basado en la longitud y el contenido de la cadena. |
| 35 | str.hex Interpreta los caracteres iniciales de str como una cadena de dígitos hexadecimales (un signo opcional y un 0x opcional) y devuelve el número correspondiente. Devuelve cero si hay un error. |
| 36 | str.include? other_str [or] str.include? fixnum Devuelve true si str contiene la cadena o el carácter dado. |
| 37 | str.index(substring [, offset]) [or] str.index(fixnum [, offset]) [or] str.index(regexp [, offset]) Devuelve el índice de la primera aparición en str de la subcadena, carácter (fixnum) o patrón (regexp) dado. Devuelve nil si no se encuentra. Si se proporciona un segundo argumento, especifica la posición en la cadena donde comenzar la búsqueda. |
| 38 | str.insert(index, other_str) Inserta other_str antes del carácter en el índice dado, modificando str. Los índices negativos se cuentan desde el final de la cadena e insertan después del carácter dado. La intención es insertar una cadena comenzando en el índice dado. |
| 39 | str.inspect Devuelve una versión imprimible de str con los caracteres especiales escapados. |
| 40 | str.intern [or] str.to_sym Devuelve el símbolo correspondiente a str, creando el símbolo si no existía previamente. |
| 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, con str alineada a la izquierda y padstr como relleno. De lo contrario, devuelve str. |
| 43 | str.lstrip Devuelve una copia de str con los espacios iniciales eliminados. |
| 44 | str.lstrip! Elimina los espacios iniciales de str; devuelve nil si no hay cambios. |
| 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 sobre str. |
| 46 | str.oct Interpreta los caracteres iniciales de str como una cadena de dígitos decimales (con un signo opcional) y devuelve el número correspondiente. Devuelve 0 si la conversión falla. |
| 47 | str.replace(other_str) Reemplaza el contenido de str con los valores correspondientes de other_str. |
| 48 | str.reverse Devuelve una nueva cadena que es el inverso de str. |
| 49 | str.reverse! Invierte str, modificándola y devolviéndola. |
| 50 | str.rindex(substring [, fixnum]) [or] str.rindex(fixnum [, fixnum]) [or] str.rindex(regexp [, fixnum]) Devuelve el índice de la última aparición en str de la subcadena, carácter (fixnum) o patrón (regexp) dado. Devuelve nil si no se encuentra. Si se proporciona un segundo argumento, especifica la posición en la cadena donde finalizar la búsqueda. Los caracteres más allá de ese punto no se tienen en cuenta. |
| 51 | str.rjust(integer, padstr=' ') Si integer es mayor que la longitud de str, devuelve una nueva cadena de longitud integer, con str alineada a la derecha y padstr como relleno. De lo contrario, devuelve str. |
| 52 | str.rstrip Devuelve una copia de str con los espacios finales eliminados. |
| 53 | str.rstrip! Elimina los espacios finales de str; devuelve nil si no hay cambios. |
| 54 | str.scan(pattern) [or] str.scan(pattern) { |match, ...| block } Ambas formas iteran sobre str haciendo coincidir pattern (que puede ser una expresión regular Regexp o una cadena String). Para cada coincidencia se genera un resultado, que se añade al array de resultados o se pasa al block. Si pattern no contiene grupos, cada resultado individual se compone de la cadena coincidente, $&. Si pattern contiene grupos, cada resultado individual es un array que contiene cada entrada de grupo. |
| 55 | 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. Si el valor está fuera de rango, la forma con un argumento Fixnum genera un IndexError. La forma con un argumento range genera un RangeError; las formas con Regexp y String ignoran la acción. |
| 56 | str.split(pattern=$;, [limit]) Divide str en subcadenas según el separador y devuelve un array de estas subcadenas. Sipatternes una cadena String, se utilizará como separador al dividir str. Si pattern es un único espacio en blanco, str se divide por espacios, ignorando los espacios iniciales y los caracteres de espacio consecutivos. Sipatternes una expresión regular Regexp, str se divide en los lugares donde pattern coincide. Cuando pattern coincide con una cadena de longitud cero, str se divide en caracteres individuales. Si se omitepatternel argumento, se utiliza el valor de $;. Si $; es nil (por defecto), str se divide por espacios, como si se hubiera especificado ` ` como separador. Si se omitelimitel argumento, se suprimen los campos nulos finales. Si limit es un número positivo, se devuelve como máximo esa cantidad de campos (si limit es 1, se devuelve toda la cadena como único elemento del array). Si limit es un número negativo, el número de campos devueltos no tiene límite y no se suprimen los campos nulos finales. |
| 57 | str.squeeze([other_str]*) Construye un conjunto de caracteres a partir de los argumentos other_str utilizando el procedimiento descrito para String#count. Devuelve una nueva cadena en la que las secuencias del mismo carácter que aparecen en el conjunto se reemplazan por un único carácter. Si no se dan argumentos, todos los caracteres idénticos se reemplazan por un único carácter. |
| 58 | str.squeeze!([other_str]*) Igual que squeeze, pero str se modifica y se devuelve; devuelve nil si no hay cambios. |
| 59 | str.strip Devuelve una copia de str con los espacios iniciales y finales eliminados. |
| 60 | str.strip! Elimina los espacios iniciales y finales de str; devuelve nil si no hay cambios. |
| 61 | str.sub(pattern, replacement) [or] str.sub(pattern) { |match| block } Devuelve una copia de str en la que la primera aparición de pattern se reemplaza por replacement o por el valor del block. pattern suele ser una expresión regular Regexp; si es una cadena String, no se interpreta ningún metacaracter de expresión regular. |
| 62 | str.sub!(pattern, replacement) [or] str.sub!(pattern) { |match| block } Realiza las sustituciones de String#sub y devuelve str; devuelve nil si no se realizó ninguna sustitución. |
| 63 | str.succ [or] str.next Devuelve el sucesor de str. |
| 64 | str.succ! [or] str.next! Equivale a String#succ, pero str se modifica y se devuelve. |
| 65 | str.sum(n=16) Devuelve una suma de comprobación de n bits de los caracteres de str, donde n es un parámetro Fixnum opcional que por defecto es 16. El resultado es simplemente la suma de los valores binarios de cada carácter de str, módulo 2n - 1. No es una suma de comprobación especialmente buena. |
| 66 | str.swapcase Devuelve una copia de str en la que todas las letras mayúsculas se convierten a minúsculas y todas las letras minúsculas se convierten a mayúsculas. |
| 67 | str.swapcase! Equivale a String#swapcase, pero str se modifica y se devuelve; devuelve nil si no hay cambios. |
| 68 | str.to_f Devuelve el resultado de interpretar los caracteres iniciales de str como un número de coma flotante. Los caracteres sobrantes más allá del final de los dígitos significativos se ignoran. Si no hay dígitos válidos al comienzo de str, devuelve 0.0. Este método no genera excepciones. |
| 69 | str.to_i(base=10) Devuelve el resultado de interpretar los caracteres iniciales de str como un entero con una base (base 2, 8, 10 o 16). Los caracteres sobrantes más allá del final de los dígitos significativos se ignoran. Si no hay dígitos válidos al comienzo de str, devuelve 0. Este método no genera excepciones. |
| 70 | str.to_s [or] str.to_str Devuelve el valor recibido. |
| 71 | str.tr(from_str, to_str) Devuelve una copia de str en la que los caracteres de from_str se reemplazan por los caracteres correspondientes de to_str. Si to_str es más corta que from_str, se rellena con su último carácter. Ambas cadenas pueden usar la notación c1.c2 para representar rangos de caracteres. Si from_str comienza con ^, representa todos los caracteres excepto los enumerados. |
| 72 | str.tr!(from_str, to_str) Equivale a String#tr, pero str se modifica y se devuelve; devuelve nil si no hay cambios. |
| 73 | str.tr_s(from_str, to_str) Procesa str según las reglas descritas para String#tr y luego elimina los caracteres duplicados que afectarían a la traducción. |
| 74 | str.tr_s!(from_str, to_str) Equivale a String#tr_s, pero str se modifica y se devuelve; devuelve nil si no hay cambios. |
| 75 | str.unpack(format) Decodifica str (que puede contener datos binarios) según la cadena de formato y devuelve un array con cada uno de los valores extraídos. Los caracteres de formato consisten en una serie de instrucciones de un solo carácter. Cada instrucción puede ir seguida de un número que indica el número de veces que se repite dicha instrucción. El asterisco (*) utilizará todos los elementos restantes. Las instrucciones sSiIlL pueden ir seguidas de un guion bajo (_) para usar el tamaño nativo de la plataforma subyacente para el tipo especificado; de lo contrario, se usa un tamaño consistente e independiente de la plataforma. Se ignoran los espacios en blanco en la cadena de formato. |
| 76 | str.upcase Devuelve una copia de str en la que todas las letras minúsculas se reemplazan por letras mayúsculas. La operación es insensible a la configuración regional; solo se ven afectados los caracteres de la a a la z. |
| 77 | str.upcase! Cambia el contenido de str a mayúsculas; devuelve nil si no hay cambios. |
| 78 | str.upto(other_str) { |s| block } Itera sobre valores consecutivos, comenzando en str y terminando en other_str (inclusive), pasando cada valor al block sucesivamente. El método String#succ se utiliza para generar cada valor. |
Directivas unpack de cadenas
La siguiente tabla enumera las directivas de desempaquetado del método String#unpack.
| Instrucción | Volver | Descripción |
|---|---|---|
| A | String | Elimina los null y espacios finales. |
| a | String | Cadena. |
| B | String | Extrae bits de cada carácter (primero el bit más significativo). |
| b | String | Extrae bits de cada carácter (primero el bit menos significativo). |
| C | Fixnum | Extrae un carácter como entero sin signo. |
| c | Fixnum | Extrae un carácter como entero. |
| D, d | Float | Trata los caracteres de longitud sizeof(double) como un double nativo. |
| E | Float | Trata los caracteres de longitud sizeof(double) como un double en orden de bytes little-endian. |
| e | Float | Trata los caracteres de longitud sizeof(float) como un float en orden de bytes little-endian. |
| F, f | Float | Trata los caracteres de longitud sizeof(float) como un float nativo. |
| G | Float | Trata los caracteres de longitud sizeof(double) como un double en orden de bytes de red. |
| g | Float | Trata los caracteres de longitud sizeof(float) como un float en orden de bytes de red. |
| H | String | Extrae el hexadecimal de cada carácter (primero el más significativo). |
| h | String | Extrae el hexadecimal de cada carácter (primero el menos significativo). |
| I | Integer | Trata los caracteres consecutivos de longitud sizeof(int) (modificada por _) como un integer nativo. |
| i | Integer | Trata los caracteres consecutivos de longitud sizeof(int) (modificada por _) como un integer nativo con signo. |
| L | Integer | Trata cuatro caracteres consecutivos (modificados por _) como un long integer nativo sin signo. |
| l | Integer | Trata cuatro caracteres consecutivos (modificados por _) como un long integer nativo con signo. |
| M | String | Quoted-Printable. |
| m | String | Codificación Base64. |
| N | Integer | Trata cuatro caracteres como un long sin signo en orden de bytes de red. |
| n | Fixnum | Trata dos caracteres como un short sin signo en orden de bytes de red. |
| P | String | Trata los caracteres de longitud sizeof(char *) como un puntero y devuelve \emph{len} caracteres desde la posición referenciada. |
| p | String | Trata los caracteres de longitud sizeof(char *) como un puntero a una cadena terminada en null. |
| Q | Integer | Trata ocho caracteres como un quad word sin signo (64 bits). |
| q | Integer | Trata ocho caracteres como un quad word con signo (64 bits). |
| S | Fixnum | Trata dos caracteres consecutivos (diferentes si se usa _) como un short sin signo en orden de bytes nativo. |
| s | Fixnum | Trata dos caracteres consecutivos (diferentes si se usa _) como un short con signo en orden de bytes nativo. |
| U | Integer | Carácter UTF-8, como entero sin signo. |
| u | String | Codificación UU. |
| V | Fixnum | Trata cuatro caracteres como un long sin signo en orden de bytes little-endian. |
| v | Fixnum | Trata dos caracteres como un short sin signo en orden de bytes little-endian. |
| w | Integer | Entero comprimido BER. |
| X | Salta hacia atrás un carácter. | |
| x | Salta hacia adelante un carácter. | |
| Z | String | Usado con *, elimina los null finales hasta el primer null. |
| @ | Omite el desplazamiento dado por el parámetro length. |
Ejemplo
Prueba los siguientes ejemplos para desempaquetar varios tipos de datos.