¿Cómo puedo obtener el primer carácter de una cadena usando Ruby?
En última instancia, lo que estoy haciendo es tomar el apellido de alguien y simplemente crear una inicial.
Entonces, si la cadena era "Smith", solo quiero "S".
"Smith".chr #=> "S"
¿Cómo puedo obtener el primer carácter de una cadena usando Ruby?
En última instancia, lo que estoy haciendo es tomar el apellido de alguien y simplemente crear una inicial.
Entonces, si la cadena era "Smith", solo quiero "S".
"Smith".chr #=> "S"
Respuestas:
Puedes usar las clases abiertas de Ruby para hacer tu código mucho más legible. Por ejemplo, esto:
class String
def initial
self[0,1]
end
end
le permitirá utilizar el initial
método en cualquier cadena. Entonces, si tiene las siguientes variables:
last_name = "Smith"
first_name = "John"
Entonces puede obtener las iniciales de manera muy limpia y legible:
puts first_name.initial # prints J
puts last_name.initial # prints S
El otro método mencionado aquí no funciona en Ruby 1.8 (¡no es que deba seguir usando 1.8 de todos modos! - pero cuando se publicó esta respuesta, todavía era bastante común):
puts 'Smith'[0] # prints 83
Por supuesto, si no lo está haciendo de forma regular, entonces definir el método podría ser excesivo y podría hacerlo directamente:
puts last_name[0,1]
Si usa una versión reciente de Ruby (1.9.0 o posterior), lo siguiente debería funcionar:
'Smith'[0] # => 'S'
Si usa 1.9.0+ o 1.8.7, lo siguiente debería funcionar:
'Smith'.chars.first # => 'S'
Si usa una versión anterior a 1.8.7, esto debería funcionar:
'Smith'.split(//).first # => 'S'
Tenga en cuenta que 'Smith'[0,1]
no no funciona en 1.8, será no darle el primer carácter, que sólo le dará el primer byte .
"Smith"[0]
devolvería el valor entero del carácter 'S'. Ambas versiones obedecen "Smith"[0,1] == "S"
.
"Smith"[0,1]
funciona en 1.8 (asumiendo ASCII). No estoy seguro de por qué asume tanto sobre el solicitante, así como sobre todos los demás a los que les gustaría aprender de esa pregunta. Por ejemplo, Mac OS X viene con Ruby 1.8, por lo que no se requiere instalación para estos usuarios.
"Smith"[0..0]
funciona tanto en ruby 1.8 como en ruby 1.9.
En aras de la integridad, desde Ruby 1.9 String # chr devuelve el primer carácter de una cadena. Todavía está disponible en 2.0 y 2.1.
"Smith".chr #=> "S"
En MRI 1.8.7 o superior:
'foobarbaz'.each_char.first
Prueba esto:
>> a = "Smith"
>> a[0]
=> "S"
O
>> "Smith".chr
#=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]
devolvería el valor entero del carácter 'S'. Ambas versiones obedecen "Smith"[0,1] == "S"
.
"Smith"[0] == ?S
es cierto tanto en Ruby 1.8 como en 1.9
Debido a una elección de diseño molesta en Ruby antes de 1.9, some_string[0]
devuelve el código de carácter del primer carácter, la forma más portátil de escribir esto es some_string[0,1]
, que le dice que obtenga una subcadena en el índice 0 de 1 carácter de longitud.
También puedes usar truncate
> 'Smith'.truncate(1, omission: '')
#=> "S"
o para formato adicional:
> 'Smith'.truncate(4)
#=> "S..."
> 'Smith'.truncate(2, omission: '.')
#=> "S."
Cualquiera de estos métodos funcionará:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
.
después name
. Y el último no tiene sentido incluso si elimina el .
, porque utiliza dos métodos diferentes para hacer lo mismo: [0]
y chr()
.
'Smith'.first