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.