Buscar..


Sintaxis

  • 'Una cadena' // crea una cadena a través de un literal entre comillas simples
  • "Una cadena" // crea una cadena a través de un literal entre comillas dobles
  • String.new ("Una cadena")
  • % q (una cadena) // sintaxis alternativa para crear cadenas entre comillas simples
  • % Q (una cadena) // sintaxis alternativa para crear cadenas entre comillas dobles

Diferencia entre literales de cadena entre comillas simples y comillas dobles

La principal diferencia es que los literales de String comillas dobles admiten interpolaciones de cadenas y el conjunto completo de secuencias de escape.

Por ejemplo, pueden incluir expresiones de Ruby arbitrarias a través de la interpolación:

# Single-quoted strings don't support interpolation
puts 'Now is #{Time.now}'
# Now is #{Time.now}

# Double-quoted strings support interpolation
puts "Now is #{Time.now}"
# Now is 2016-07-21 12:43:04 +0200

Las cadenas entre comillas dobles también admiten el conjunto completo de secuencias de escape, incluidos "\n" , "\t" ...

puts 'Hello\nWorld'
# Hello\nWorld

puts "Hello\nWorld"
# Hello
# World

... mientras que las cadenas de comillas simples no admiten secuencias de escape, muestra el conjunto mínimo necesario para que las cadenas de comillas simples sean útiles: comillas simples literales y barras invertidas, '\'' y '\\' respectivamente.

Creando una cadena

Ruby proporciona varias formas de crear un objeto String . La forma más común es usar comillas simples o dobles para crear una " cadena literal ":

s1 = 'Hello'
s2 = "Hello"

La principal diferencia es que los literales de cadena entre comillas dobles son un poco más flexibles ya que admiten la interpolación y algunas secuencias de escape de barra invertida.

También hay varias otras formas posibles de crear un literal de cadena utilizando delimitadores de cadena arbitrarios. Un delimitador de cadena arbitrario es un % seguido por un par de delimitadores coincidentes:

%(A string)
%{A string}
%<A string>
%|A string|
%!A string!

Finalmente, puede usar las secuencias %q y %Q , que son equivalentes a ' y " ":

puts %q(A string)
# A string
puts %q(Now is #{Time.now})
# Now is #{Time.now}

puts %Q(A string)
# A string
puts %Q(Now is #{Time.now})
# Now is 2016-07-21 12:47:45 +0200

%Q secuencias %q y %Q son útiles cuando la cadena contiene comillas simples, comillas dobles o una combinación de ambas. De esta manera, no necesitas escapar del contenido:

%Q(<a href="/profile">User's profile<a>)

Puede usar varios delimitadores diferentes, siempre que haya un par coincidente:

%q(A string)
%q{A string}
%q<A string>
%q|A string|
%q!A string!

Concatenación de cuerdas

Concatenar cadenas con el operador + :

s1 = "Hello"
s2 = " "
s3 = "World"

puts s1 + s2 + s3
# => Hello World

s = s1 + s2 + s3
puts s
# => Hello World

O con el operador << :

s = 'Hello'
s << ' '
s << 'World'
puts s
# => Hello World

Tenga en cuenta que el operador << modifica el objeto en el lado izquierdo.

También puedes multiplicar cadenas, por ejemplo

"wow" * 3
# => "wowwowwow"

Interpolación de cuerdas

El delimitador de doble comillas " y %Q secuencia %Q admiten la interpolación de cadenas usando #{ruby_expression} :

puts "Now is #{Time.now}"
# Now is Now is 2016-07-21 12:47:45 +0200

puts %Q(Now is #{Time.now})
# Now is Now is 2016-07-21 12:47:45 +0200

Manipulación de casos

"string".upcase     # => "STRING"
"STRING".downcase   # => "string"
"String".swapcase   # => "sTRING"
"string".capitalize # => "String"

Estos cuatro métodos no modifican el receptor original. Por ejemplo,

str = "Hello"
str.upcase # => "HELLO"
puts str   # => "Hello"

Hay cuatro métodos similares que realizan las mismas acciones pero modifican el receptor original.

"string".upcase!     # => "STRING"
"STRING".downcase!   # => "string"
"String".swapcase!   # => "sTRING"
"string".capitalize! # => "String"

Por ejemplo,

str = "Hello"
str.upcase!  # => "HELLO"
puts str     # => "HELLO"

Notas:

  • Antes de Ruby 2.4, estos métodos no manejan Unicode.

Dividiendo una cadena

String#split divide una String en una Array , basada en un delimitador.

"alpha,beta".split(",")
# => ["alpha", "beta"]

Una String vacía da como resultado una Array vacía:

"".split(",")
# => []

Un delimitador no coincidente da como resultado una Array contiene un solo elemento:

"alpha,beta".split(".")
# => ["alpha,beta"]

También puedes dividir una cadena usando expresiones regulares:

"alpha, beta,gamma".split(/, ?/)
# => ["alpha", "beta", "gamma"]

El delimitador es opcional; por defecto, una cadena se divide en espacios en blanco:

"alpha beta".split
# => ["alpha", "beta"] 

Unirse a cuerdas

Array#join une un Array en una String , basado en un delimitador:

["alpha", "beta"].join(",")
# => "alpha,beta"

El delimitador es opcional, y por defecto es una String vacía.

["alpha", "beta"].join
# => "alphabeta"

Una Array vacía da como resultado una String vacía, sin importar qué delimitador se use.

[].join(",")
# => ""

Cuerdas multilínea

La forma más fácil de crear una cadena multilínea es simplemente usar varias líneas entre comillas:

address = "Four score and seven years ago our fathers brought forth on this
continent, a new nation, conceived in Liberty, and dedicated to the
proposition that all men are created equal."

El principal problema con esa técnica es que si la cadena incluye una cita, romperá la sintaxis de la cadena. Para solucionar el problema, puede utilizar un heredoc en su lugar:

puts <<-RAVEN
  Once upon a midnight dreary, while I pondered, weak and weary, 
  Over many a quaint and curious volume of forgotten lore— 
      While I nodded, nearly napping, suddenly there came a tapping, 
  As of some one gently rapping, rapping at my chamber door. 
  "'Tis some visitor," I muttered, "tapping at my chamber door— 
              Only this and nothing more." 
  RAVEN

Ruby admite documentos de estilo shell aquí con <<EOT , pero el texto de terminación debe comenzar la línea. Eso complica la sangría del código, por lo que no hay muchas razones para usar ese estilo. Desafortunadamente, la cadena tendrá sangrías según la forma en que se sangra el código.

Ruby 2.3 resuelve el problema introduciendo <<~ que elimina los espacios iniciales en exceso:

2.3
def build_email(address)
  return (<<~EMAIL)
    TO: #{address}

    To Whom It May Concern:

    Please stop playing the bagpipes at sunrise!
                     
    Regards,
    Your neighbor               
  EMAIL
end

Porcentaje de cadenas también trabajan para crear cadenas multilínea:

%q(
HAMLET        Do you see yonder cloud that's almost in shape of a camel?
POLONIUS        By the mass, and 'tis like a camel, indeed.
HAMLET        Methinks it is like a weasel.
POLONIUS        It is backed like a weasel.
HAMLET        Or like a whale?
POLONIUS        Very like a whale
)

Hay algunas formas de evitar la interpolación y las secuencias de escape:

  • Comillas simples en lugar de comillas dobles: '\n is a carriage return.'

  • Minúscula q en una cadena de porcentaje: %q[#{not-a-variable}]

  • Cita simple la cadena terminal en un heredoc:

    <<-'CODE'
       puts 'Hello world!'
    CODE
    

Cuerdas formateadas

Ruby puede inyectar una matriz de valores en una cadena reemplazando cualquier marcador de posición con los valores de la matriz suministrada.

"Hello %s, my name is %s!" % ['World', 'br3nt']
# => Hello World, my name is br3nt!

Los marcadores de posición están representados por dos %s y los valores son proporcionados por la matriz ['Hello', 'br3nt'] . El operador % indica a la cadena que inyecte los valores de la matriz.

Reemplazos de caracteres de cadena

El método tr devuelve una copia de una cadena donde los caracteres del primer argumento son reemplazados por los caracteres del segundo argumento.

"string".tr('r', 'l') # => "stling"

Para reemplazar solo la primera aparición de un patrón con otra expresión, use el método sub

"string ring".sub('r', 'l') # => "stling ring"

Si desea reemplazar todas las apariciones de un patrón con esa expresión, use gsub

"string ring".gsub('r','l') # => "stling ling" 

Para eliminar caracteres, pase una cadena vacía para el segundo parámetro

También puedes usar expresiones regulares en todos estos métodos.

Es importante tener en cuenta que estos métodos solo devolverán una nueva copia de una cadena y no la modificarán en su lugar. Para hacer eso, necesitas usar el tr! , sub! y gsub! métodos respectivamente.

Entendiendo los datos en una cadena

En Ruby, una cadena es solo una secuencia de bytes junto con el nombre de una codificación (como UTF-8 , US-ASCII , ASCII-8BIT ) que especifica cómo puede interpretar esos bytes como caracteres.

Las cadenas de Ruby se pueden usar para contener texto (básicamente una secuencia de caracteres), en cuyo caso se suele usar la codificación UTF-8.

"abc".bytes  # => [97, 98, 99]
"abc".encoding.name  # => "UTF-8"

Las cadenas de Ruby también se pueden usar para almacenar datos binarios (una secuencia de bytes), en cuyo caso se suele utilizar la codificación ASCII-8BIT.

[42].pack("i").encoding  # => "ASCII-8BIT"

Es posible que la secuencia de bytes en una cadena no coincida con la codificación, lo que resulta en errores si intenta usar la cadena.

"\xFF \xFF".valid_encoding? # => false
"\xFF \xFF".split(' ')      # ArgumentError: invalid byte sequence in UTF-8

Sustitución de cuerdas

p "This is %s" % "foo"
# => "This is foo"

p "%s %s %s" % ["foo", "bar", "baz"]
# => "foo bar baz"

p "%{foo} == %{foo}" % {:foo => "foo" }
# => "foo == foo"

Vea String % docs y Kernel :: sprintf para más detalles.

Cadena comienza con

Para encontrar si una cadena comienza con un patrón, el start_with? el método es útil

str = "zebras are cool"
str.start_with?("zebras")      => true

También puede comprobar la posición del patrón con el index

str = "zebras are cool"
str.index("zebras").zero?      => true

Cadena termina con

Para encontrar si una cadena termina con un patrón, el end_with? el método es útil

str = "I like pineapples"
str.end_with?("pineaaples")      => false

Cuerdas de posicionamiento

En Ruby, las cadenas pueden ser justificadas a la izquierda, justificadas a la derecha o centradas

Para justificar a la izquierda la cadena, use el método ljust . Esto incluye dos parámetros, un entero que representa el número de caracteres de la nueva cadena y una cadena, que representa el patrón a rellenar.

Si el número entero es mayor que la longitud de la cadena original, la nueva cadena se justificará a la izquierda con el parámetro de cadena opcional tomando el espacio restante. Si no se proporciona el parámetro de cadena, la cadena se rellenará con espacios.

str ="abcd"
str.ljust(4)          => "abcd"
str.ljust(10)         => "abcd      "

Para justificar a la derecha una cadena, use el método rjust . Esto incluye dos parámetros, un entero que representa el número de caracteres de la nueva cadena y una cadena, que representa el patrón a rellenar.

Si el número entero es mayor que la longitud de la cadena original, la nueva cadena se justificará a la derecha con el parámetro de cadena opcional que ocupará el espacio restante. Si no se proporciona el parámetro de cadena, la cadena se rellenará con espacios.

str = "abcd"
str.rjust(4)          => "abcd"
str.rjust(10)         => "      abcd"

Para centrar una cadena, usa el método center . Esto incluye dos parámetros, un entero que representa el ancho de la nueva cadena y una cadena con la que se rellenará la cadena original. La cuerda se alineará al centro.

str = "abcd"
str.center(4)          => "abcd"
str.center(10)         => "   abcd   "


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow