Ruby có một chuỗi.startswith (thời gian abc) được xây dựng trong phương thức không?


Câu trả lời:


339

Nó được gọi String#start_with?, không phải String#startswith: Trong Ruby, tên của các phương thức boolean-ish kết thúc bằng ?và các từ trong tên phương thức được phân tách bằng một _. Không chắc chắn nơi sđã đi, cá nhân, tôi thích String#starts_with?hơn thực tếString#start_with?


9
Matz đã nói rằng anh ấy thích mà không có s vì nó trông giống như số nhiều người thứ hai hoặc số ba.
Andrew Grimm

5
Chuỗi # start_with? đã được giới thiệu trong ruby ​​1.8.7 và 1.9.0 - đối với các phiên bản cũ hơn, bạn có thể muốn sử dụng một trong các phiên bản regex hoặc index được đề cập trong các câu trả lời khác.
Hamish Downer

3
trong Rails, bạn có thể sử dụng Chuỗi # started_with?
Abdo

3
@anthropomorphic github.com/rails/rails/blob/... ; đó là bí danh cho Chuỗi # start_with?
Abdo 17/12/13

10
@AndrewGrimm Vấn đề duy nhất là "một chuỗi" là số ít người thứ ba! (Ergo, 's' không nên bị loại bỏ).
dùng456584

41

Tiêu đề câu hỏi của bạn và cơ thể câu hỏi của bạn là khác nhau. Ruby không có start_with? phương pháp. Ray , đó là một Ruby khuôn khổ , tuy nhiên, không như các quốc gia sepp2k. Xem bình luận của anh ấy về câu trả lời của anh ấy cho liên kết đến tài liệu cho nó.

Bạn luôn có thể sử dụng biểu thức chính quy:

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

^ có nghĩa là "bắt đầu chuỗi" trong các biểu thức thông thường


Tôi lấy kết hợp chủ đề + bods có nghĩa là "Ruby không có phương thức started_with. Có rails không?".
sepp2k

@ sepp2k, nhưng đó là ?trong tiêu đề câu hỏi)
Nakilon

Chuỗi có start_with? kể từ ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 cũng có start_with? - tài liệughi chú phát hành 1.8.7
Hamish Downer

cẩn thận khi xây dựng regex ra khỏi chuỗi ký tự - nhớ thoát khỏi bất kỳ ký tự đặc biệt nào. có một chức năng cho rằng các chuỗi chữ có thể không dự đoán được
Radu Simionescu

17

Nếu đây là một dự án không phải Rails, tôi sẽ sử dụng String#index:

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

9
Tuy nhiên, điều này sẽ đòi hỏi nhiều hiệu năng hơn, trong đó một start_with?phương thức có thể đơn giản xác nhận rằng phần đầu của chuỗi khớp với chuỗi đã cho, do đó xử lý tối đa n ký tự trong đó n là độ dài của chuỗi đã cho trong khi indexsẽ phải tìm kiếm toàn bộ chuỗi cơ sở. Trong trường hợp thất bại, starts_with?sẽ lấy một quyền truy cập (trên mỗi chuỗi) và so sánh, trong khi đó indexsẽ đi gần như toàn bộ chiều dài của chuỗi cơ sở.
OldPeculier

5

Bạn có thể sử dụng String =~ Regex. Nó trả về vị trí của kết hợp regex đầy đủ trong chuỗi.

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

Vui lòng sử dụng //thay vì %rbất cứ khi nào có thể.
Cyoce
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.