Obtenir une sous-chaîne dans Ruby par x nombre de caractères

J’essaie de produire un code Ruby qui prendra une chaîne et en retournera une nouvelle, avec un nombre x de caractères supprimé de sa fin – il peut s’agir de lettres, de chiffres, d’espaces, etc.

Ex: donné la chaîne suivante

a_ssortingng = "a1wer4zx"

J’ai besoin d’un moyen simple pour obtenir la même chaîne, moins – disons – les 3 derniers caractères. Dans le cas ci-dessus, ce serait “a1wer”. La façon dont je le fais maintenant semble très compliquée:

 an_array = a_ssortingng.split(//,(a_ssortingng.length-2)) an_array.pop new_ssortingng = an_array.join 

Des idées?

Que dis-tu de ça?

 s[0, s.length - 3] 

Ou ca

 s[0..-4] 

modifier

 s = "abcdefghi" puts s[0, s.length - 3] # => abcdef puts s[0..-4] # => abcdef 

Utilisez quelque chose comme ceci:

 s = "abcdef" new_s = s[0..-2] # new_s = "abcde" 

Voir la méthode slice ici: http://ruby-doc.org/core/classes/Ssortingng.html

Une autre option consiste à obtenir la liste des chars de la chaîne, à take caractères x et join revenir à une chaîne:

 [13] pry(main)> 'abcdef'.chars.take(2).join => "ab" [14] pry(main)> 'abcdef'.chars.take(20).join => "abcdef" 

Une autre option pourrait être d’utiliser la méthode des slice

 a_ssortingng = "a1wer4zx" a_ssortingng.slice(0..5) => "a1wer4" 

Documentation: http://ruby-doc.org/core-2.5.0/Ssortingng.html#method-i-slice

si vous en avez besoin dans des rails, vous pouvez utiliser en premier ( code source )

 s = '1234567890' x = 4 s.first(s.length - x) # => "123456" 

il y a aussi le dernier ( code source )

 s.last(2) # => "90" 

ou bien vérifier de / à