ruby首字母大写每个单词

我需要使每个字的第一个字符大写,并使其余的小写…

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 

无轨道(负载轨的ActiveSupport修补#titleize方法String

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

(一些)由#titleize处理的string用例

  • “kirk douglas”
  • “kirk_douglas”
  • “柯克 – 道格拉斯”
  • “柯克·道格拉斯”
  • “柯克·道格拉斯”

#titleize陷阱

#titleize方法比最初期待的要复杂一些,可能会产生意想不到的结果,特别是在@JamesMcMahon指出的区分大小写的情况下:

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

因为它是为了处理骆驼式的代码,如:

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

要处理这种边缘情况,您可以在运行#titleize之前先用#downcase清理string。 当然,如果你这样做,你会消除任何camelCased分词:

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

"hello world".titleize应该输出“Hello World”。

另一个select是使用正则expression式和gsub,它采取一个块:

 'one TWO three foUR'.gsub(/\w+/, &:capitalize) 
 "hello world".split.each{|i| i.capitalize!}.join(' ')