Ruby заглавные буквы каждого слова

Мне нужно сделать первый символ каждого слова в верхнем регистре и сделать остальное в нижнем регистре...

manufacturer.MFA_BRAND.first.upcase

устанавливает только первую букву в верхнем регистре, но мне это нужно:

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

Ответ 1

попробуйте следующее:

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

#=> One Two Three Four

или

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

Ответ 2

В Rails:

"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

без Rails (загрузите рельсы ActiveSupport, чтобы исправить метод #titleize для String)

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

(некоторые) варианты использования строк, обработанные #titleize

  • "Кирк Дуглас"
  • "kirk_douglas"
  • "Kirk-Дуглас"
  • "" Кирк Дуглас
  • "" Кирк Дуглас

#titleize gotchas

Rails titleize преобразует такие вещи, как тире и подчеркивание, в пробелы и может привести к другим неожиданным результатам, особенно в чувствительных к регистру ситуациях, на что указывает @JamesMcMahon:

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

потому что он предназначен для обработки кода на верблюде, например:

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

Чтобы справиться с этим #downcase случаем, вы можете сначала очистить строку с помощью #downcase перед запуском #titleize. Конечно, если вы сделаете это, вы уничтожите все разделенные верблюдами слова:

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

Ответ 3

"hello world".titleize, который должен выводить "Hello World".

Ответ 4

Другой вариант - использовать регулярное выражение и gsub, который принимает блок:

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

Ответ 6

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

Ответ 7

Если вы пытаетесь загладить первую букву каждого слова в массиве, вы можете просто поставить это:

array_name.map(&ampы;: прописные буквы)