क्या रूबी के पास एक string.startswith ("abc") विधि में बनाया गया है?


200

क्या रूबी के पास एक ऐसी some_string.starts_with("abc")विधि है जिसे बनाया गया है?



7
संयोग से, आप रूबी के बारे में पूछ रहे हैं, या रेल के बारे में?
एंड्रयू ग्रिम

जवाबों:


339

इसे कहा जाता है String#start_with?, नहीं String#startswith: रूबी में, बूलियन-ईश विधियों के नाम के साथ समाप्त होता है ?और विधि नामों में शब्दों को ए के साथ अलग किया जाता है _। यकीन नहीं है कि कहाँ sगया, व्यक्तिगत रूप से, मैं String#starts_with?वास्तविक पर पसंद करूँगाString#start_with?


9
मैत्ज़ ने कहा है कि वह एस के बिना पसंद करते हैं क्योंकि यह दूसरे व्यक्ति की तरह दिखता है या तीसरे व्यक्ति का बहुवचन।
एंड्रयू ग्रिम

5
स्ट्रिंग # start_with? रूबी 1.8.7 और 1.9.0 में पेश किया गया था - पुराने संस्करणों के लिए आप अन्य उत्तरों में उल्लिखित रेगेक्स या इंडेक्स संस्करणों में से एक का उपयोग करना चाह सकते हैं।
हामिश डाउनर

3
रेल में, आप स्ट्रिंग # start_with का उपयोग कर सकते हैं?
अबडो

3
@anthropomorphic github.com/rails/rails/blob/… ; यह स्ट्रिंग के लिए एक उपनाम है # start_with?
अब्दो

10
@AndrewGrimm एकमात्र समस्या यह है कि "एक तार" तीसरे व्यक्ति एकवचन है! (एर्गो, 'एस' को नहीं छोड़ना चाहिए था)।
user456584

41

आपका प्रश्न शीर्षक और आपका प्रश्न निकाय अलग-अलग हैं। रूबी के पास एक start_with नहीं है? तरीका। रेल , जो रूबी ढांचा है , हालांकि, sepp2k राज्यों के रूप में करता है। इसके लिए प्रलेखन के लिंक के लिए उनके जवाब पर उनकी टिप्पणी देखें।

आप हमेशा एक नियमित अभिव्यक्ति का उपयोग कर सकते हैं:

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

^ नियमित अभिव्यक्ति में "स्ट्रिंग की शुरुआत" का मतलब है


मैंने "रूबी में एक start_with विधि नहीं है। इसका मतलब है?"
sepp2k

@ sepp2k, लेकिन यह है ?सवाल शीर्षक में)
Nakilon

स्ट्रिंग शुरू हो गई है? चूंकि रूबी 1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
स्टीवंसगैग

4
@steenslag - रूबी 1.8.7 में भी start_with है? - प्रलेखन और 1.8.7 जारी नोट
हमीश डाउनर

स्ट्रिंग शाब्दिक से रीगेक्स का निर्माण करते समय सावधान - किसी भी विशेष आकर्षण से बचने के लिए याद रखें। वहाँ के लिए एक समारोह है कि तार स्ट्रिंग शाब्दिक अप्रत्याशित हो सकता है
Radu Simionescu

17

यदि यह एक गैर-रेल परियोजना के लिए है, तो मैं उपयोग करूंगा String#index:

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

9
यह, हालांकि, अधिक प्रदर्शन-गहन होगा, इसमें एक start_with?विधि बस पुष्टि कर सकती है कि स्ट्रिंग की शुरुआत दी गई स्ट्रिंग से मेल खाती है - इस प्रकार अधिकांश n वर्णों पर प्रसंस्करण जहां n दी गई स्ट्रिंग की लंबाई है - जबकि indexखोज करनी होगी संपूर्ण आधार स्ट्रिंग। विफलता के मामले में, starts_with?एक एक्सेस (प्रति स्ट्रिंग) और तुलना indexकरेंगे , जबकि बेस स्ट्रिंग की पूरी लंबाई तक चलेगा।
ओल्डपेकुलियर

5

आप उपयोग कर सकते हैं String =~ Regex। यह स्ट्रिंग में पूर्ण रेगेक्स मैच की स्थिति देता है।

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

जब भी संभव हो //इसके बजाय उपयोग करें %r
साइओस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.