web-dev-qa-db-fra.com

Extraire les n derniers caractères d’une chaîne Ruby

Pour obtenir les derniers n caractères d'une chaîne, j'ai supposé que vous pouviez utiliser

ending = string[-n..-1]

mais si la chaîne a moins de n longues lettres, vous obtenez nil.

Quelles solutions de contournement sont disponibles?

Background: Les chaînes sont en ASCII simple et j'ai accès à Ruby 1.9.1, et j'utilise Plain Old Ruby = Objets (pas de framework web).

99
Andrew Grimm

Ici vous avez une ligne, vous pouvez mettre un nombre supérieur à la taille de la chaîne:

"123".split(//).last(5).to_s

Pour Ruby 1.9+

"123".split(//).last(5).join("").to_s

Pour Ruby 2.0+, join renvoie une chaîne

"123".split(//).last(5).join
95
Gareve

La solution la plus simple à laquelle je puisse penser est la suivante:

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

(EDIT: l'opérateur or a une priorité inférieure à celle de l'affectation, assurez-vous donc d'utiliser || au lieu.)

108
perimosocordiae

En straight Ruby (sans Rails), vous pouvez faire

string.chars.last(n).join

Par exemple:

2.4.1 :009 > a = 'abcdefghij'
 => "abcdefghij"
2.4.1 :010 > a.chars.last(5).join
 => "fghij"
2.4.1 :011 > a.chars.last(100).join
 => "abcdefghij"

Si vous utilisez Ruby sur Rails, vous pouvez appeler les méthodes first et last sur un objet chaîne. Ces méthodes sont préférées car elles sont succinctes et intuitif.

Par exemple:

[1] pry(main)> a = 'abcdefg'                                                                                                                
 => "abcdefg"
[2] pry(main)> a.first(3)                                                                                                                   
 => "abc"
[3] pry(main)> a.last(4)                                                                                                                    
 => "defg"
47
Zack Xu
ending = string.reverse[0...n].reverse
13
Andrew Grimm

Vous pouvez utiliser le code suivant:

string[string.length-n,string.length]
8
rurkss

Pour obtenir les n derniers caractères d'une chaîne, vous pouvez le faire

a [-n, n] si a est le tableau.

Voici un exemple si vous en voulez un.

Ruby-1.9.2-p180: 006> a = "911234567890"

=> "911234567890"

Ruby-1.9.2-p180: 009> a [-5,5]

=> "67890"

Ruby-1.9.2-p180: 010> a [-7,7]

=> "4567890"

8
Sunil

Avez-vous essayé une regex?

string.match(/(.{0,#{n}}$)/)
ending=$1

La regex capture autant de caractères que possible à la fin de la chaîne, mais pas plus que n. Et le stocke dans 1 $.

5
EmFi

Amélioration de la réponse d'EmFi.

string[/.{,#{n}}\z/m]
1
sawa