Je me demande simplement s'il y a un id = Ruby pour extraire une sous-chaîne d'un index jusqu'à la fin de la chaîne. Je connais str[index..-1]
qui fonctionne en passant un objet range au String
's []
méthode mais c'est un peu maladroit. En python, par exemple, vous pouvez écrire str[index:]
qui vous obtiendrait implicitement le reste de la chaîne.
Exemple:
s = "hello world"
s[6..-1] # <-- "world"
Y a-t-il quelque chose de plus agréable que s[6..-1]
?
Je pense que non.
Il semble que Range
soit la meilleure façon de le faire.
Voici "plus agréable" si vous le souhaitez. Vous pouvez étendre la classe Ruby String, puis utiliser cette méthode dans votre code. Par exemple:
class String
def last num
self[-num..-1]
end
end
Puis:
s = "hello world"
p s.last(6)
Pour obtenir la chaîne d'une plage:
s = 'hello world'
s[5..s.length - 1] # world
Cependant, si vous souhaitez simplement obtenir le dernier mot:
'hello world'.split(' ').last # world
Vous pouvez étendre la classe String
. Je ne sais pas si c'est un idiome Ruby cependant:
class String
def last(n)
self[(self.length - n)..-1]
end
end
La bibliothèque activesupport
de Rails (qui peut être installée comme une gemme indépendante de Rails) ajoute une méthode from
aux chaînes:
> s = "hello world"
"hello world"
> s.from(6)
"world"
https://api.rubyonrails.org/classes/String.html#method-i-from
Ruby 2.6 a introduit gammes sans fin , ce qui élimine fondamentalement la nécessité d'avoir à spécifier l'index de fin. Dans votre cas, vous pouvez faire:
s = "hello world"
s[6..]