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.
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"
Il suffit d'utiliser l'index "-1":
a = "hello there"
a[-1] #=> "e"
C'est la solution la plus simple.
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.
str[fixnum] => fixnum or nil
str[index] → new_str or nil
Si vous utilisez Rails, appliquez la méthode #last à votre chaîne, comme ceci:
"abc".last
# => c
En Ruby, vous pouvez utiliser quelque chose comme ceci:
ending = str[-n..-1] || str
ce retour n derniers caractères
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"
Slice () méthode fera pour vous.
Pour ex
"hello".slice(-1)
# => "o"
Merci
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 ;
.