ruby ruby-1.8.7

ruby - Obtener el último carácter en la cadena



ruby-1.8.7 (8)

Quiero obtener el último carácter de una cadena MY WAY - 1) Obtener el último índice 2) Obtener el carácter en el último índice, como STRING Después de eso compararé la cadena con otra, pero no incluiré esa parte del código aquí. Intenté el código de abajo y obtengo un número extraño en su lugar. Estoy usando ruby ​​1.8.7.

¿Por qué sucede esto y cómo lo hago?

line = "abc;" last_index = line.length-1 puts "last index = #{last_index}" last_char = line[last_index] puts last_char

Salida-

last index = 3 59

Ruby docs me dijo que el corte de matrices funciona de esta manera -

a = "hello there" a[1] #=> "e"

Pero, en mi código no lo hace.


En ruby ​​puedes usar algo como esto:

ending = str[-n..-1] || str

esto devuelve los últimos n caracteres


Puedes usar a[-1, 1] para obtener el último carácter.

Obtienes un resultado inesperado porque el valor de retorno de la String#[] cambió. Está utilizando Ruby 1.8.7 al referirse al documento de Ruby 2.0

Antes de Ruby 1.9, devuelve un código de carácter entero. Desde Ruby 1.9, devuelve el propio personaje.

String#[] en Ruby 1.8.7 :

str[fixnum] => fixnum or nil

String#[] en Ruby 2.0 :

str[index] → new_str or nil


Si está utilizando Rails, aplique el método #last a su cadena, de esta manera:

"abc".last # => c


Solo usa el índice "-1":

a = "hello there" a[-1] #=> "e"

Es la solución más sencilla.


Tu código funciona un poco, el "número extraño" que estás viendo es ; Código ASCII. Cada personaje tiene un código ASCII correspondiente ( asciitable.com ). Puede usar para la conversación puts last_char.chr , debería salir ; .


Yo usaría el método #last como la cadena es una matriz.

Para obtener el último personaje.

"hello there".last() #=> "e"

Para obtener los últimos 3 caracteres puedes pasar un número a #last.

"hello there".last(3) #=> "ere"


ACTUALIZACIÓN: Sigo obteniendo votos ascendentes constantes sobre esto, de ahí la edición. El uso de [-1, 1] es correcto, sin embargo, una solución más atractiva sería usar solo [-1] . Comprueba la respuesta de Oleg Pischicov.

line[-1] # => "c"

Respuesta original

En ruby ​​puedes usar [-1, 1] para obtener el último carácter de una cadena. Aquí:

line = "abc;" # => "abc;" line[-1, 1] # => ";" teststr = "some text" # => "some text" teststr[-1, 1] # => "t"

Explicación: las cadenas pueden tomar un índice negativo, que cuenta hacia atrás desde el final de la cadena, y una longitud de cuántos caracteres desea (uno en este ejemplo).

Usando String#slice como en el ejemplo de OP: ( funcionará solo en ruby ​​1.9 en adelante como se explica en la respuesta de Yu Hau )

line.slice(line.length - 1) # => ";" teststr.slice(teststr.length - 1) # => "t"

¡Vamos a enloquecer!

teststr.split('''').last # => "t" teststr.split(//)[-1] # => "t" teststr.chars.last # => "t" teststr.scan(/.$/)[0] # => "t" teststr[/.$/] # => "t" teststr[teststr.length-1] # => "t"


El método Slice () hará por ti.

Para ex

"hello".slice(-1) # => "o"

Gracias