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.