রুবি প্রতিটি শব্দ প্রথম অক্ষরকে মূলধন করুন


162

আমাকে প্রতিটি শব্দের বড় হাতের অক্ষর তৈরি করতে হবে এবং বাকী ছোট হাতের অক্ষর তৈরি করতে হবে ...

manufacturer.MFA_BRAND.first.upcase

কেবলমাত্র প্রথম অক্ষরের বড় হাতের সেট করে দিচ্ছে, তবে আমার এটি দরকার:

ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four

উত্তর:


217

এটা চেষ্টা কর:

puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')

#=> One Two Three Four

অথবা

puts 'one TWO three foUR'.split.map(&:capitalize)*' '

7
splitডিফল্টরূপে স্পেসে বিভক্ত হবে, যাতে আপনি এটি আরও খাটো করে তুলতে পারেন:'one TWO three foUR'.split.map(&:capitalize).join(' ')
Mischa

@ ওয়ালটি আপনি সম্ভবত .map(&:capitalize)ডকটিতে এটি কোথায় খুঁজে পেয়েছেন বা কমপক্ষে নির্দেশ করতে পারবেন? আমি এর কোনও রেফারেন্স পাই না। এছাড়াও, *' 'দ্বিতীয় কোড স্নিপেটের শেষে চুক্তি কী ?
macsplean

6
@ ম্যাকস্প্লিন &:methodসিনট্যাক্স ইন অ্যারেতে প্রতিটি আইটেমের একটি পদ্ধতি কল করারmap একটি সংক্ষিপ্ত উপায় । তারপরে আপনি joinসেই অ্যারেটিকে স্ট্রিতে পরিণত করতে কল করতে পারেন । * ' 'একটি হল বিকল্প পথ যোগদানের ডাকতে । আপনি এটিকে স্ট্রিং তৈরির জন্য অ্যারের আইটেমগুলিকে একসাথে গুন হিসাবে ভাবতে পারেন।
অ্যান্ড্রু

283

কারাগারে:

"kirk douglas".titleize => "Kirk Douglas"
#this also works for 'kirk_douglas'

ডাব্লু / ও রেলগুলি:

"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

ডাব্লু / ও রেলগুলি (# টিটলাইজ পদ্ধতিতে প্যাচ করার জন্য রেলগুলির অ্যাক্টিভসপোর্টটি লোড করুন String)

require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"

(কিছু) স্ট্রিং ব্যবহারের কেস # শিরোনাম দ্বারা পরিচালিত

  • "কিরক ডগলাস"
  • "Kirk_douglas"
  • "কার্ক-ডগলাস"
  • "KirkDouglas"
  • "KirkDouglas"

গেটছগুলি শিরোনাম

রেইলগুলি titleizeড্যাশ এবং আন্ডারস্কোরের মতো জিনিসগুলিকে স্পেসে রূপান্তর করবে এবং অন্যান্য অপ্রত্যাশিত ফলাফল আনতে পারে, বিশেষত @ জেমসম্যাকমাহোনের নির্দেশিত কেস-সংবেদনশীল পরিস্থিতিতে:

"hEy lOok".titleize #=> "H Ey Lo Ok"

কারণ এটি উট-কেসড কোডগুলি হ্যান্ডেল করার জন্য বোঝানো হয়েছে:

"kirkDouglas".titleize #=> "Kirk Douglas"

এই প্রান্তের #downcaseকেসটি মোকাবেলায় আপনি # টাইটেলাইজ চালানোর আগে প্রথমে আপনার স্ট্রিংটি পরিষ্কার করতে পারেন । অবশ্যই যদি আপনি এটি করেন তবে আপনি কোনও উটযুক্ত কেস শব্দের বিভাজন মুছে ফেলবেন:

"kirkDouglas".downcase.titleize #=> "Kirkdouglas"

একটি রত্ন শিরোনামও রয়েছে যা দুর্দান্তভাবে কাজ করে।
zhon

6
টাইটেলাইজটি দেখতে যেমন সহজ সরল নয়, উদাহরণস্বরূপ 'এই লো লোক' 'এইচ আই লো ওকে' হয়ে যায়
জেমস ম্যাকমাহন

8
বিশাল গোটা, টাইটেলাইজ নির্দিষ্ট অক্ষরগুলি সম্পূর্ণরূপে মুছে ফেলবে, যেমন ড্যাশ (-)। "কে? - আমি" .ইটলাইজ => "কে? আমি"
পিক্সিলিথ

@ পিক্সিলিটার আমার জন্য এটি সমস্ত ড্যাশগুলি পৃথক স্থানে রূপান্তর করে।
বোল্ডার_রবি

37

"hello world".titleize যা "হ্যালো ওয়ার্ল্ড" আউটপুট করা উচিত।


এই আউটপুটগুলি "One Two Three Fo Ur"যা এক্ষেত্রে পছন্দসই আউটপুট থেকে পৃথক, তবে অন্যদের মধ্যে এটি পছন্দসই হতে পারে।
রিক স্মিথ

3
এটি রুবি পদ্ধতি নয়; এটি একটি অ্যাক্টিভসপোর্ট (রেলস) পদ্ধতিটি v2.2.1 এ চালু হয়েছে
জ্যাক বার্ট

20

অন্য বিকল্পটি হ'ল একটি রেজেেক্স এবং জিএসব ব্যবহার করা যা একটি ব্লক নেয়:

'one TWO three foUR'.gsub(/\w+/, &:capitalize)

এটি আন্তঃ-শব্দ ড্যাশ ইত্যাদি সংরক্ষণ করে
বিয়ার মি

3
.gsub(/\b\w/, &:capitalize)শব্দের মধ্যে উদ্দেশ্যযুক্ত মূলধন সংরক্ষণ করে, যেমন "জেন এমসি কলিনস"
ব্যবহারকারী 3680688

4

স্ট্রিং # ক্যাপিটালাইজ পদ্ধতিটি দেখুন।

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize


স্ট্রিং # বড় বড় অক্ষর প্রথম অক্ষরের পরে বাকী স্ট্রিংকে কমিয়ে দেয়। "ম্যাকজি" এর মতো নামের জন্য এটি একটি অনাকাঙ্খিত ফলাফল, তবে এটি এক্ষেত্রে আংশিকভাবে কার্যকর।
Br.Bill

3
"hello world".split.each{|i| i.capitalize!}.join(' ')

1
আপনি যদি কোনও ভেরিয়েবলের সাথে কাজ না করে থাকেন তবে ব্যাং (!) অপারেটর ব্যবহার করার কোনও কারণ নেই
বোল্ডার_রবি

2
@ পাথর_রবী এটা সত্য নয় যে "আপনি যদি ভেরিয়েবলের সাথে কাজ না করেন তবে ব্যাং অপারেটর ব্যবহারের কোনও কারণ নেই।" eachব্লকের প্রতিটি পুনরাবৃত্তির রিটার্ন মান বাতিল করা হচ্ছে। !দ্বারা উত্পাদিত স্ট্রিং পরিবর্তন করা হয় splitইন-জায়গা। ছাড়া !, capitalizeপুনরুক্তি প্রতি একটি নতুন মূলধনের স্ট্রিং তৈরি করা হবে এবং তারপরে তা তাত্ক্ষণিকভাবে তা ত্যাগ করা হবে। চূড়ান্ত ফলাফলটি "hello world"আসল স্ট্রিংয়ের মতোই হবে। এর সাথে !, split'd অ্যারেতে প্রতিটি স্ট্রিং পরিবর্তন করা হচ্ছে, এবং এর ফলে ফলাফল eachমূলধনযুক্ত স্ট্রিংগুলির একটি অ্যারে।
ব্যবহারকারী513951

1
হ্যাঁ আপনি কেবল ব্যবহার করার কথা map। আকর্ষণীয় হ্যাক যদিও। পয়েন্টস
বোল্ডার_রুবি

1

আপনি যদি প্রতিটি শব্দের প্রথম অক্ষরকে একটি অ্যারেতে মূলধনের চেষ্টা করছেন তবে আপনি কেবল এটি লিখতে পারেন:

array_name.map (&: পুঁজিতে)


0

আমি এটি একই ধরণের সমস্যার জন্য ব্যবহার করেছি:

'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }

এটি পূর্ববর্তী উত্তরগুলি চেষ্টা করে দেখেছি এমন বিচিত্র ঘটনাগুলি পরিচালনা করে:

  • শব্দহীন অক্ষর যেমন -
  • উচ্চারণযুক্ত অক্ষরগুলি é এর মতো নামগুলিতে সাধারণ é
  • স্ট্রিংয়ের মাঝখানে মূল অক্ষর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.