जवाबों:
इसे इस्तेमाल करे:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
या
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
.map(&:capitalize)या कम से कम यह इंगित करने के लिए कि डॉक में आपने इसे कहां पाया है? मुझे इसका कोई संदर्भ नहीं मिल रहा है। इसके अलावा, *' 'दूसरे कोड के स्निपेट के अंत में क्या सौदा है ?
&:methodमें वाक्य रचना mapएक है संक्षिप्त तरीके सरणी में प्रत्येक आइटम पर एक विधि कॉल करने के । फिर आप joinउस सरणी को स्ट्रिंग में बदलने के लिए कॉल कर सकते हैं । * ' 'एक है वैकल्पिक तरीका में शामिल होने के कॉल करने के लिए । आप इसे एक स्ट्रिंग बनाने के लिए सरणी में आइटम को एक साथ गुणा करने के बारे में सोच सकते हैं।
रेल में:
"kirk douglas".titleize => "Kirk Douglas"
#this also works for 'kirk_douglas'
w / o रेल:
"kirk douglas".split(/ |\_/).map(&:capitalize).join(" ")
#OBJECT IT OUT
def titleize(str)
str.split(/ |\_/).map(&:capitalize).join(" ")
end
#OR MONKEY PATCH IT
class String
def titleize
self.split(/ |\_/).map(&:capitalize).join(" ")
end
end
w / o रेल (लोड रेल के ActiveSupport पैच #titleize करने के लिए विधि String)
require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"
रेल की titleizeचीज़ें डैश और अंडरस्कोर जैसी चीज़ों को रिक्त स्थान में बदल देंगी और अन्य अप्रत्याशित परिणाम उत्पन्न कर सकती हैं, खासकर केस-संवेदी स्थितियों के साथ जैसा @JamesMcMahon द्वारा बताया गया है:
"hEy lOok".titleize #=> "H Ey Lo Ok"
क्योंकि यह ऊंट-आवरण कोड को संभालने के लिए है जैसे:
"kirkDouglas".titleize #=> "Kirk Douglas"
इस एज केस से निपटने के लिए आप #downcase#titleize चलाने से पहले अपनी स्ट्रिंग को पहले से साफ कर सकते हैं । यदि आप ऐसा करते हैं तो बेशक आप किसी भी ऊँचे शब्द को मिटा देंगे:
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
एक अन्य विकल्प एक रेगेक्स और gsub का उपयोग करना है, जो एक ब्लॉक लेता है:
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
.gsub(/\b\w/, &:capitalize)शब्दों के भीतर अपेक्षित पूंजीकरण को संरक्षित करता है, जैसे "जेन mcCollins"
स्ट्रिंग # कैपिटलाइज़ विधि में देखें।
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
"hello world".split.each{|i| i.capitalize!}.join(' ')
eachब्लॉक के प्रत्येक पुनरावृत्ति का वापसी मूल्य खारिज किया जा रहा है। !द्वारा उत्पादित तार को संशोधित किया गया है splitयथा-स्थान। इसके बिना !, capitalizeप्रति पुनरावृत्ति में एक नया कैपिटलाइज़्ड स्ट्रिंग बनाया जाएगा, और फिर तुरंत इसे छोड़ दिया जाएगा। अंतिम परिणाम "hello world"मूल स्ट्रिंग के समान ही होगा । साथ !, में प्रत्येक स्ट्रिंग split'घ सरणी बदला जा रहा है, और इसलिए का परिणाम eachपूंजीकृत तार की एक सरणी है।
map। दिलचस्प हैक हालांकि। अंक
मैंने इसे इसी तरह की समस्या के लिए इस्तेमाल किया है:
'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }
यह निम्नलिखित अजीब मामलों को संभालता है जिन्हें मैंने पिछले उत्तरों की कोशिश करते हुए देखा था:
splitडिफ़ॉल्ट रूप से अंतरिक्ष में विभाजित हो जाएगा, इसलिए आप इसे और भी छोटा बना सकते हैं:'one TWO three foUR'.split.map(&:capitalize).join(' ')