रूबी का उपयोग करके मैं एक स्ट्रिंग में पहला चरित्र कैसे प्राप्त कर सकता हूं?
अंतत: मैं जो कर रहा हूं, वह किसी का अंतिम नाम ले रहा है और सिर्फ एक प्रारंभिक शुरुआत कर रहा हूं।
तो अगर स्ट्रिंग "स्मिथ" थी, तो मुझे "एस" चाहिए।
"Smith".chr #=> "S"
रूबी का उपयोग करके मैं एक स्ट्रिंग में पहला चरित्र कैसे प्राप्त कर सकता हूं?
अंतत: मैं जो कर रहा हूं, वह किसी का अंतिम नाम ले रहा है और सिर्फ एक प्रारंभिक शुरुआत कर रहा हूं।
तो अगर स्ट्रिंग "स्मिथ" थी, तो मुझे "एस" चाहिए।
"Smith".chr #=> "S"
जवाबों:
अपने कोड को अधिक पठनीय बनाने के लिए आप रूबी की खुली कक्षाओं का उपयोग कर सकते हैं। उदाहरण के लिए, यह:
class String
def initial
self[0,1]
end
end
आपको initialकिसी भी स्ट्रिंग पर विधि का उपयोग करने की अनुमति देगा । तो अगर आपके पास निम्नलिखित चर हैं:
last_name = "Smith"
first_name = "John"
फिर आप शुरुआती को बहुत सफाई और आसानी से प्राप्त कर सकते हैं:
puts first_name.initial # prints J
puts last_name.initial # prints S
यहाँ वर्णित अन्य विधि रूबी 1.8 पर काम नहीं करती है (ऐसा नहीं है कि आपको वैसे भी 1.8 का उपयोग करना चाहिए! - लेकिन जब यह उत्तर पोस्ट किया गया था तब भी यह काफी सामान्य था):
puts 'Smith'[0] # prints 83
बेशक, यदि आप इसे नियमित रूप से नहीं कर रहे हैं, तो विधि को परिभाषित करना ओवरकिल हो सकता है, और आप इसे सीधे कर सकते हैं:
puts last_name[0,1]
यदि आप रूबी (1.9.0 या बाद के) के हाल के संस्करण का उपयोग करते हैं, तो निम्न कार्य करना चाहिए:
'Smith'[0] # => 'S'
यदि आप 1.9.0+ या 1.8.7 का उपयोग करते हैं, तो निम्नलिखित कार्य करना चाहिए:
'Smith'.chars.first # => 'S'
यदि आप 1.8.7 से अधिक पुराने संस्करण का उपयोग करते हैं, तो यह काम करना चाहिए:
'Smith'.split(//).first # => 'S'
ध्यान दें कि 1.8 पर काम नहीं'Smith'[0,1] करता है , यह आपको पहला चरित्र नहीं देगा, यह केवल आपको पहला बाइट देगा ।
"Smith"[0]'S' अक्षर का पूर्णांक मान लौटाएगा। दोनों संस्करण मानते हैं "Smith"[0,1] == "S"।
"Smith"[0,1]1.8 पर काम करता है (एएससीआईआई मानकर)। निश्चित नहीं है कि आप आवश्यकताकर्ता के बारे में इतना अधिक क्यों मानते हैं, साथ ही साथ हर किसी के बारे में जो उस प्रश्न से सीखना चाहते हैं। उदाहरण के लिए, मैक ओएस एक्स रूबी 1.8 के साथ बंडल में आता है, इसलिए इन उपयोगकर्ताओं के लिए कोई स्थापना की आवश्यकता नहीं है।
"Smith"[0..0]
रूबी 1.8 और रूबी 1.9 दोनों में काम करता है।
पूर्णता के लिए, चूंकि रूबी 1.9 स्ट्रिंग # chr एक स्ट्रिंग का पहला वर्ण देता है। यह अभी भी 2.0 और 2.1 में उपलब्ध है।
"Smith".chr #=> "S"
एमआरआई 1.8.7 या अधिक में:
'foobarbaz'.each_char.first
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]'S' अक्षर का पूर्णांक मान लौटाएगा। दोनों संस्करण मानते हैं "Smith"[0,1] == "S"।
"Smith"[0] == ?Sरूबी 1.8 और 1.9 दोनों पर सच है
1.9 से पहले रूबी में एक कष्टप्रद डिजाइन पसंद के कारण - पहले चरित्र के चरित्र कोड को some_string[0]लौटाता है - यह लिखने का सबसे पोर्टेबल तरीका है , जो इसे सूचकांक 0 पर एक विकल्प प्राप्त करने के लिए कहता है कि यह 1 वर्ण लंबा है।some_string[0,1]
आप भी उपयोग कर सकते हैं truncate
> 'Smith'.truncate(1, omission: '')
#=> "S"
या अतिरिक्त स्वरूपण के लिए:
> 'Smith'.truncate(4)
#=> "S..."
> 'Smith'.truncate(2, omission: '.')
#=> "S."
इनमें से कोई भी तरीका काम करेगा:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
. उसके बाद काम नहीं करेगा name। और आखिरी गैर-कामुक है भले ही आप हटा दें ., क्योंकि यह एक ही काम करने के लिए दो अलग-अलग तरीकों का उपयोग कर रहा है - [0] और chr() ।
'Smith'.first