web-dev-qa-db-fra.com

Obtenir le dernier caractère de la chaîne

Je veux obtenir le dernier caractère d'une chaîne MY WAY - 1) Obtenir le dernier index 2) Obtenir le caractère au dernier index, sous forme de chaîne. Après cela, je comparerai la chaîne à une autre, mais je n’inclurai pas cette partie du code ici. J'ai essayé le code ci-dessous et je reçois un nombre étrange à la place. J'utilise Ruby 1.8.7.

Pourquoi est-ce que cela se passe et comment je le fais?

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

Sortie-

last index = 3
59

Ruby docs m'a dit que le découpage en tableau fonctionne de cette façon - 

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

Mais dans mon code, ce n'est pas le cas.

23
stack1

UPDATE: Je reçois constamment des votes positifs, d'où l'édition. Utiliser [-1, 1] est correct, mais une solution plus esthétique consisterait simplement à [-1]. Vérifiez la réponse d'Oleg Pischicov.

line[-1]
# => "c"

Réponse originale

En Ruby, vous pouvez utiliser [-1, 1] pour obtenir le dernier caractère d'une chaîne. Ici:

line = "abc;"
# => "abc;"
line[-1, 1]
# => ";"

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

Explication: Les chaînes peuvent prendre un index négatif, qui compte à rebours à partir de la fin De la chaîne, et une longueur de combien de caractères vous souhaitez (un dans Cet exemple). 

Utilisation de String#slice as dans l'exemple d'OP: (fonctionnera uniquement à partir de Ruby 1.9, comme expliqué dans la réponse de Yu Hau} _)

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

Allons fou !!!

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

Il suffit d'utiliser l'index "-1":

a = "hello there"

a[-1] #=> "e"

C'est la solution la plus simple.

39
Oleg Pischicov

Vous pouvez utiliser a[-1, 1] pour obtenir le dernier caractère.

Vous obtenez un résultat inattendu car la valeur de retour de String#[] a changé. Vous utilisez Ruby 1.8.7 en vous référant au document de Ruby 2.0

Avant Ruby 1.9, il renvoie un code de caractère entier. Depuis Ruby 1.9, il retourne le personnage lui-même.

String#[] in Ruby 1.8.7

str[fixnum] => fixnum or nil

String#[] in Ruby 2.0 :

str[index] → new_str or nil
5
Yu Hao

Si vous utilisez Rails, appliquez la méthode #last à votre chaîne, comme ceci:

"abc".last
# => c
5
victorhazbun

En Ruby, vous pouvez utiliser quelque chose comme ceci:

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

ce retour n derniers caractères

1
Aram

J'utiliserais la méthode #last car la chaîne est un tableau.

Pour obtenir le dernier caractère.

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

Pour obtenir les 3 derniers caractères, vous pouvez donner un numéro à #last.

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

Slice () méthode fera pour vous.

Pour ex 

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

Merci

0
Breen ho

Votre code fonctionne un peu, le "nombre étrange" que vous voyez est le code ; ASCII. Chaque personnage a un code ASCII correspondant ( https://www.asciitable.com/ ). Vous pouvez utiliser pour conversationputs last_char.chr, il devrait générer ;.

0
Pierre Ferry