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"]