我需要将每个单词的第一个字符设为大写,然后将其余单词设为小写......
manufacturer.MFA_BRAND.first.upcase
只设置第一个字母大写,但我需要这个:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
答案 0 :(得分:256)
在Rails中:
"kirk douglas".titleize => "Kirk Douglas"
#this also works for 'kirk_douglas'
没有Rails:
"kirk douglas".split(/ |\_/).map(&:capitalize).join(" ")
#OBJECT IT OUT
def titleize(str)
str.split(/ |\_/).map(&:capitalize).join(" ")
end
没有Rails(加载rails的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"
要处理此边缘情况,您可以在运行#titleize之前先使用#downcase
清除字符串。当然,如果你这样做,你将消灭任何基于camelCased的单词分隔:
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
答案 1 :(得分:203)
试试这个:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
或
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
答案 2 :(得分:37)
"hello world".titleize
应输出“Hello World”。
答案 3 :(得分:18)
另一种选择是使用正则表达式和gsub,它采用一个块:
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
答案 4 :(得分:4)
查看String#capitalize方法。
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
答案 5 :(得分:3)
"hello world".split.each{|i| i.capitalize!}.join(' ')
答案 6 :(得分:0)
如果你试图将数组中每个单词的第一个字母大写,你可以简单地把它放在:
array_name.map(安培;:大写)
答案 7 :(得分:0)
我将其用于类似的问题:
'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }
这处理了以下奇怪的情况,我看到它们尝试了以前的答案: