Ответ 1
попробуйте следующее:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
или
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
Мне нужно сделать первый символ каждого слова в верхнем регистре и сделать остальное в нижнем регистре...
manufacturer.MFA_BRAND.first.upcase
устанавливает только первую букву в верхнем регистре, но мне это нужно:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
попробуйте следующее:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
или
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
В 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"
Rails titleize
преобразует такие вещи, как тире и подчеркивание, в пробелы и может привести к другим неожиданным результатам, особенно в чувствительных к регистру ситуациях, на что указывает @JamesMcMahon:
"hEy lOok".titleize #=> "H Ey Lo Ok"
потому что он предназначен для обработки кода на верблюде, например:
"kirkDouglas".titleize #=> "Kirk Douglas"
Чтобы справиться с этим #downcase
случаем, вы можете сначала очистить строку с помощью #downcase
перед запуском #titleize. Конечно, если вы сделаете это, вы уничтожите все разделенные верблюдами слова:
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
"hello world".titleize
, который должен выводить "Hello World".
Другой вариант - использовать регулярное выражение и gsub, который принимает блок:
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
Посмотрите на метод заглавной строки String #.
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
"hello world".split.each{|i| i.capitalize!}.join(' ')
Если вы пытаетесь загладить первую букву каждого слова в массиве, вы можете просто поставить это:
array_name.map(&ы;: прописные буквы)