我需要将每个单词的第一个字符变成大写,其余的变成小写......
manufacturer.MFA_BRAND.first.upcase
只是设置第一个字母大写,但我需要这个:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
在 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
w/o Rails(加载 rails 的 ActiveSupport 以将 #titleize 方法修补到String
)
require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"
Railstitleize
会将破折号和下划线之类的内容转换为空格,并可能产生其他意想不到的结果,尤其是在@JamesMcMahon 指出的区分大小写的情况下:
"hEy lOok".titleize #=> "H Ey Lo Ok"
因为它旨在处理驼峰式代码,例如:
"kirkDouglas".titleize #=> "Kirk Douglas"
要处理这种边缘情况,您可以#downcase
在运行#titleize 之前先清理字符串。当然,如果您这样做,您将消除任何驼峰式分词:
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
尝试这个:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
或者
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
"hello world".titleize
应该输出“Hello World”。
另一种选择是使用正则表达式和 gsub,它需要一个块:
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
"hello world".split.each{|i| i.capitalize!}.join(' ')
查看 String#capitalize 方法。
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
如果您尝试将数组中每个单词的第一个字母大写,您可以简单地输入:
array_name.map(&:大写)
我用它来解决类似的问题:
'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }
这可以处理我在尝试之前的答案时看到的以下奇怪情况: