Hat Ruby eine eingebaute Methode string.startswith ("abc")?


Antworten:


339

Es heißt String#start_with?nicht String#startswith: In Ruby enden die Namen von booleschen Methoden mit ?und die Wörter in Methodennamen werden durch ein getrennt _. sIch bin mir nicht sicher, wohin das ging, ich persönlich würde es String#starts_with?dem tatsächlichen vorziehenString#start_with?


9
Matz hat gesagt, er bevorzuge ohne das s, da es dann wie eine zweite Person Singular oder eine dritte Person Plural aussieht.
Andrew Grimm

5
String # start_with? wurde in Ruby 1.8.7 und 1.9.0 eingeführt - für ältere Versionen möchten Sie möglicherweise eine der in anderen Antworten genannten Regex- oder Indexversionen verwenden.
Hamish Downer

3
In Rails können Sie String # start_with?
Abdo

3
@anthropomorphic github.com/rails/rails/blob/… ; Es ist ein Alias ​​für String # start_with?
Abdo

10
@ AndrewGrimm Das einzige Problem ist, dass "eine Zeichenfolge" die dritte Person Singular ist! (Ergo, 's' sollte nicht fallen gelassen worden sein).
user456584

41

Ihr Fragentitel und Ihr Fragetext sind unterschiedlich. Ruby hat keine Starts mit? Methode. Rails , ein Ruby- Framework , tut dies jedoch , wie in sepp2k angegeben. Siehe seinen Kommentar zu seiner Antwort für den Link zur Dokumentation dafür.

Sie können jedoch immer einen regulären Ausdruck verwenden:

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

^ bedeutet "Anfang der Zeichenfolge" in regulären Ausdrücken


Ich habe die Kombination aus Betreff und Körper so verstanden, dass "Ruby keine Methode" meets_with "hat. Hat Rails?".
sepp2k

@ sepp2k, aber es ist ?in Frage Titel)
Nakilon

String hat start_with? seit ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 hat auch start_with? - Dokumentation und 1.8.7 Versionshinweise
Hamish Downer

Vorsicht beim Erstellen von Regexen aus String-Literalen - denken Sie daran, keine Sonderzeichen zu verwenden. Es gibt eine Funktion dafür, dass die Zeichenfolgenliterale unvorhersehbar sein können
Radu Simionescu

17

Wenn dies für ein Nicht-Rails-Projekt ist, würde ich verwenden String#index:

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

9
Dies wäre jedoch start_with?insofern leistungsintensiver, als eine Methode einfach bestätigen kann, dass der Anfang der Zeichenfolge mit der angegebenen Zeichenfolge übereinstimmt, wodurch höchstens n Zeichen verarbeitet werden, wobei n die Länge der angegebenen Zeichenfolge ist, während indexgesucht werden muss die gesamte Basiszeichenfolge. In einem Fehlerfall starts_with?wird ein Zugriff (pro Zeichenfolge) und ein Vergleich durchgeführt, während indexfast die gesamte Länge der Basiszeichenfolge ausgeführt wird.
OldPeculier

5

Sie können verwenden String =~ Regex. Es gibt die Position der vollständigen Regex-Übereinstimmung in der Zeichenfolge zurück.

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

Bitte verwenden Sie //statt %rwann immer möglich.
Cyoce
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.