Est-ce que Ruby a une méthode intégrée string.startswith («abc»)?


Réponses:


339

Cela s'appelle String#start_with?, pas String#startswith: dans Ruby, les noms des méthodes booléennes se terminent par ?et les mots dans les noms de méthode sont séparés par un _. Je ne sais pas où est sallé, personnellement, je préfère String#starts_with?sur le réelString#start_with?


9
Matz a dit qu'il préfère sans le s car il ressemble alors à la deuxième personne du singulier ou à la troisième personne du pluriel.
Andrew Grimm

5
Chaîne # start_with? a été introduit dans ruby ​​1.8.7 et 1.9.0 - pour les versions plus anciennes, vous souhaiterez peut-être utiliser l'une des versions regex ou index mentionnées dans d'autres réponses.
Hamish Downer

3
dans Rails, vous pouvez utiliser String # starts_with?
Abdo

3
@anthropomorphic github.com/rails/rails/blob/… ; c'est un alias pour String # start_with?
Abdo

10
@AndrewGrimm Le seul problème étant que "une chaîne" est la troisième personne du singulier! (Ergo, 's' n'aurait pas dû être abandonné).
user456584

41

Le titre de votre question et le corps de votre question sont différents. Ruby n'a pas de start_with? méthode. Rails , qui est un Ruby cadre cependant, fait , comme les États sepp2k. Voir son commentaire sur sa réponse pour le lien vers la documentation correspondante.

Vous pouvez toujours utiliser une expression régulière:

if SomeString.match(/^abc/) 
   # SomeString starts with abc

^ signifie "début de chaîne" dans les expressions régulières


J'ai pris la combinaison sujet + bods pour signifier "Ruby n'a pas de méthode start_with. Est-ce que rails?".
sepp2k

@ sepp2k, mais il s'agit ?du titre de la question)
Nakilon

1
La chaîne a start_with? depuis ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 a également start_with? - documentation et notes de version 1.8.7
Hamish Downer

Soyez prudent lorsque vous construisez des expressions rationnelles à partir de littéraux de chaîne - n'oubliez pas d'échapper à tout caractère spécial. il y a une fonction pour ce fi les littéraux de chaînes peuvent être imprévisibles
Radu Simionescu

17

Si c'est pour un projet non-Rails, j'utiliserais String#index:

"foobar".index("foo") == 0  # => true

9
Ce serait, cependant, plus gourmand en performances, dans la mesure où une start_with?méthode peut simplement confirmer que le début de la chaîne correspond à la chaîne donnée - traitant ainsi au plus n caractères où n est la longueur de la chaîne donnée - alors indexqu'elle devra rechercher la chaîne de base entière. Dans un cas d'échec, starts_with?prendra un accès (par chaîne) et une comparaison, tandis que indexparcourra presque toute la longueur de la chaîne de base.
OldPeculier

5

Vous pouvez utiliser String =~ Regex. Il renvoie la position de la correspondance regex complète dans la chaîne.

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false

Veuillez utiliser à la //place de %rchaque fois que possible.
Cyoce
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.