Apakah Ruby memiliki metode string.startswith ("abc")?


Jawaban:


339

Disebut String#start_with?, bukan String#startswith: Di Ruby, nama metode boolean-ish diakhiri dengan ?dan kata-kata dalam nama metode dipisahkan dengan a _. Tidak yakin ke mana sperginya, secara pribadi, saya lebih suka String#starts_with?daripada yang sebenarnyaString#start_with?


9
Matz mengatakan dia lebih suka tanpa s karena kemudian terlihat seperti orang kedua tunggal atau orang ketiga jamak.
Andrew Grimm

5
String # start_with? diperkenalkan di ruby ​​1.8.7 dan 1.9.0 - untuk versi yang lebih lama Anda mungkin ingin menggunakan salah satu versi regex atau indeks yang disebutkan dalam jawaban lain.
Hamish Downer

3
di Rails, Anda dapat menggunakan String # begin_with?
Abdo

3
@anthropomorphic github.com/rails/rails/blob/… ; itu alias untuk String # start_with?
Abdo

10
@AndrewGrimm Satu-satunya masalah adalah "string" adalah orang ketiga tunggal! (Ergo, 's' seharusnya tidak dijatuhkan).
user456584

41

Judul pertanyaan dan badan pertanyaan Anda berbeda. Ruby tidak memiliki begin_with? metode. Rails , yang merupakan kerangka kerja Ruby , tidak , sebagai status sepp2k. Lihat komentarnya pada jawabannya untuk tautan ke dokumentasi untuk itu.

Anda selalu dapat menggunakan ekspresi reguler:

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

^ berarti "permulaan string" dalam ekspresi reguler


Saya mengambil kombinasi subjek + bods yang berarti "Ruby tidak memiliki metode begin_with. Apakah rails?".
sepp2k

@ sepp2k, tetapi ?dalam judul pertanyaan)
Nakilon

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

4
@steenslag - ruby ​​1.8.7 juga memiliki start_with? - dokumentasi dan catatan rilis 1.8.7
Hamish Downer

hati-hati saat membangun regex dari string literal - jangan lupa untuk menghindari karakter khusus apa pun. ada fungsi untuk itu string literal dapat diprediksi
Radu Simionescu

17

Jika ini untuk proyek non-Rails, saya akan menggunakan String#index:

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

9
Akan tetapi, ini akan menjadi lebih intensif-kinerja, dalam suatu start_with?metode hanya dapat mengkonfirmasi bahwa awal string cocok dengan string yang diberikan - dengan demikian memproses paling banyak n karakter di mana n adalah panjang dari string yang diberikan - sedangkan indexharus mencari seluruh string dasar. Dalam kasus kegagalan, starts_with?akan mengambil satu akses (per string) dan perbandingan, sedangkan indexakan berjalan hampir sepanjang string dasar.
OldPeculier

5

Anda bisa menggunakannya String =~ Regex. Ini mengembalikan posisi pertandingan regex penuh dalam string.

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

Silakan gunakan //alih-alih %rkapan pun memungkinkan.
Cyoce
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.