Ruby มี string.startswith (“ abc”) ในตัวหรือไม่?


คำตอบ:


339

มันเรียกว่าString#start_with?ไม่String#startswith: ในทับทิมชื่อของวิธีการแบบบูล-ish จบลงด้วยและคำพูดในชื่อวิธีการที่จะแยกกับ? _ไม่แน่ใจว่าคนที่sไปด้วยตัวเองฉันชอบString#starts_with?มากกว่าของจริงString#start_with?


9
Matz บอกว่าเขาชอบโดยไม่ชอบเพราะมันดูเหมือนเป็นคนที่สองเอกพจน์หรือคนที่สามเป็นพหูพจน์
Andrew Grimm

5
String # start_with? ถูกนำมาใช้ใน ruby ​​1.8.7 และ 1.9.0 - สำหรับรุ่นเก่าคุณอาจต้องการใช้หนึ่งในรุ่น regex หรือดัชนีที่กล่าวถึงในคำตอบอื่น ๆ
Hamish Downer

3
ใน Rails คุณสามารถใช้ String # starts_with ได้ไหม?
Abdo

3
@anthropomorphic github.com/rails/rails/blob/… ; มันเป็นชื่อแทนสำหรับ String # start_with?
Abdo

10
@AndrewGrimm ปัญหาเดียวคือ "สตริง" เป็นบุคคลที่สามเอกพจน์! (เออร์โกไม่ควรถูกทิ้ง)
user456584

41

ชื่อคำถามและเนื้อหาคำถามของคุณแตกต่างกัน Rubyไม่มีการเริ่มต้นด้วยไหม? วิธี. Railsซึ่งเป็นเฟรมเวิร์ก Ruby อย่างไรก็ตามทำตามที่ sepp2k ระบุ ดูความคิดเห็นของเขาเกี่ยวกับคำตอบของเขาสำหรับลิงก์ไปยังเอกสารของมัน

คุณสามารถใช้นิพจน์ทั่วไปได้เสมอว่า:

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

^ หมายถึง "start of string" ในนิพจน์ทั่วไป


ฉันใช้ชุดค่าผสมเรื่อง + bods เพื่อแปลความหมายว่า "รูบีไม่มีเมธอด starts_with มีรางหรือไม่"
sepp2k

@ sepp2k แต่มันอยู่?ในชื่อคำถาม)
Nakilon

สตริงมี start_with? ตั้งแต่ ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 ก็มี start_with เช่นกัน? - เอกสารประกอบและบันทึกประจำรุ่น 1.8.7
Hamish Downer

ระวังเมื่อสร้าง regexes จากตัวอักษรสตริง - อย่าลืมตัวอักษรพิเศษใด ๆ มีฟังก์ชั่นสำหรับ fi ตัวอักษรสตริงสามารถคาดเดาไม่ได้
Radu Simionescu

17

หากนี่เป็นโครงการที่ไม่ใช่ Rails ฉันจะใช้String#index:

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

9
อย่างไรก็ตามสิ่งนี้จะมีประสิทธิภาพมากขึ้นซึ่งstart_with?วิธีการนั้นสามารถยืนยันได้ว่าจุดเริ่มต้นของสตริงตรงกับสตริงที่กำหนดดังนั้นการประมวลผลที่อักขระnส่วนใหญ่โดยที่nคือความยาวของสตริงที่กำหนด - ในขณะที่indexจะต้องค้นหา สตริงฐานทั้งหมด ในกรณีที่ล้มเหลวstarts_with?จะใช้เวลาหนึ่งการเข้าถึง (ต่อสตริง) และการเปรียบเทียบในขณะที่indexจะเดินเกือบเต็มความยาวของสตริงฐาน
OldPeculier

5

String =~ Regexคุณสามารถใช้ มันส่งคืนตำแหน่งของการจับคู่ regex แบบเต็มในสตริง

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

กรุณาใช้//แทน%rเมื่อใดก็ตามที่เป็นไปได้
Cyoce
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.