रूबी: एक स्ट्रिंग का पहला चरित्र कैसे प्राप्त करें


113

रूबी का उपयोग करके मैं एक स्ट्रिंग में पहला चरित्र कैसे प्राप्त कर सकता हूं?

अंतत: मैं जो कर रहा हूं, वह किसी का अंतिम नाम ले रहा है और सिर्फ एक प्रारंभिक शुरुआत कर रहा हूं।

तो अगर स्ट्रिंग "स्मिथ" थी, तो मुझे "एस" चाहिए।


10
एक साइड नोट के रूप में, यदि आप रेल में हैं तो आप बस कर सकते हैं'Smith'.first
विकी

रूबी 1.9+ में"Smith".chr #=> "S"
टायलर जेम्स यंग

जवाबों:


128

अपने कोड को अधिक पठनीय बनाने के लिए आप रूबी की खुली कक्षाओं का उपयोग कर सकते हैं। उदाहरण के लिए, यह:

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] 

101

यदि आप रूबी (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] करता है , यह आपको पहला चरित्र नहीं देगा, यह केवल आपको पहला बाइट देगा


1
ध्यान दें कि यह केवल ruby19 में काम करता है। रूबी 18 में "Smith"[0]'S' अक्षर का पूर्णांक मान लौटाएगा। दोनों संस्करण मानते हैं "Smith"[0,1] == "S"
प्राचीर

@ क्रैम्पियन: निश्चित रूप से, लेकिन इस सवाल का कोई संकेत नहीं है कि ओपी सबसे हाल के संस्करण का उपयोग नहीं करता है, इसलिए चीजों को जटिल क्यों करें?
जॉर्ग डब्ल्यू मित्तग

4
रूबी 1.8 विरासत नहीं है! रूबी 1.8 लाइन अभी भी समर्थित है और सबसे अधिक 1.8.8 संस्करण जारी होने की संभावना है। इसके अलावा, न तो रूबी और न ही रुबिनियस 1.9 का समर्थन करते हैं। मैं 5 डॉलर की शर्त लगाता हूं कि आज 1.9 के मुकाबले 1.8 से अधिक उपयोगकर्ता हैं।
मार्क-आंद्रे लफ्यून

3
@ जोर्ग: उत्तर "Smith"[0,1]1.8 पर काम करता है (एएससीआईआई मानकर)। निश्चित नहीं है कि आप आवश्यकताकर्ता के बारे में इतना अधिक क्यों मानते हैं, साथ ही साथ हर किसी के बारे में जो उस प्रश्न से सीखना चाहते हैं। उदाहरण के लिए, मैक ओएस एक्स रूबी 1.8 के साथ बंडल में आता है, इसलिए इन उपयोगकर्ताओं के लिए कोई स्थापना की आवश्यकता नहीं है।
मार्क-आंद्रे लफ्यून

3
आपको 'öngström' (UTF-8 में) का प्रारंभिक नाम कैसे मिलेगा ताकि यह रूबी 1.8.x और 1.9.x दोनों में अपेक्षित रूप से काम करेगा? सुझाए गए तरीकों में से कोई भी 1.8.x में काम नहीं करेगा।
लार्स हग्सथ

30
"Smith"[0..0]

रूबी 1.8 और रूबी 1.9 दोनों में काम करता है।


1
अगर 1.8.6 और 1.9 समर्थन की आवश्यकता है तो यह सबसे अच्छा समाधान है।
11



12

रेल में

name = 'Smith'
name.first 

उपयोग करने का आसान तरीका। उत्तर के लिए धन्यवाद।
AMIC MING


5
>> s = 'Smith'                                                          
=> "Smith"                                                              
>> s[0]                                                                 
=> "S"                                                        

1
ध्यान दें कि यह केवल ruby19 में काम करता है। रूबी 18 में "Smith"[0]'S' अक्षर का पूर्णांक मान लौटाएगा। दोनों संस्करण मानते हैं "Smith"[0,1] == "S"
प्राचीर

1
@ क्रैम्पियन: वास्तव में। मुझे लगता है कि "Smith"[0] == ?Sरूबी 1.8 और 1.9 दोनों पर सच है
मार्क-आंद्रे लाफ्यून

2

1.9 से पहले रूबी में एक कष्टप्रद डिजाइन पसंद के कारण - पहले चरित्र के चरित्र कोड को some_string[0]लौटाता है - यह लिखने का सबसे पोर्टेबल तरीका है , जो इसे सूचकांक 0 पर एक विकल्प प्राप्त करने के लिए कहता है कि यह 1 वर्ण लंबा है।some_string[0,1]


str [0,1] 1.8 और 1.9 में भी काम नहीं करता है, जैसा कि पूर्व में यह पहले बाइट देता है जबकि बाद में यह पहला चरित्र देता है
लार्स हग्सथ

1
यह वास्तव में एक अंतर नहीं है कि कैसे अनुक्रमण 1.9 मल्टीबाइट भाषाओं के समर्थन में इतना काम करता है। वे दोनों पहले चरित्र को लौटाने के लिए हैं, लेकिन 1.8 में एक "चरित्र" क्या है के बारे में अधिक अनुभवहीन है।
चक

2

एक अन्य विकल्प जिसका अभी तक उल्लेख नहीं किया गया है:

> "Smith".slice(0)
#=> "S"

0

आप भी उपयोग कर सकते हैं truncate

> 'Smith'.truncate(1, omission: '')
#=> "S"

या अतिरिक्त स्वरूपण के लिए:

> 'Smith'.truncate(4)
#=> "S..."

> 'Smith'.truncate(2, omission: '.')
#=> "S."

-1

इनमें से कोई भी तरीका काम करेगा:

name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S

1
इन विधियों में से कोई भी. उसके बाद काम नहीं करेगा name। और आखिरी गैर-कामुक है भले ही आप हटा दें ., क्योंकि यह एक ही काम करने के लिए दो अलग-अलग तरीकों का उपयोग कर रहा है - [0] और chr()
jeffdill2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.