Ruby首字母大写每个单词

时间:2012-11-22 21:23:59

标签: ruby string

我需要将每个单词的第一个字符设为大写,然后将其余单词设为小写......

manufacturer.MFA_BRAND.first.upcase

只设置第一个字母大写,但我需要这个:

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

8 个答案:

答案 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

处理的字符串用例
  • “kirk douglas”
  • “kirk_douglas”
  • “柯克 - 道格拉斯”
  • “柯克·道格拉斯”
  • “柯克·道格拉斯”

#titleize gotchas

#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)

答案 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 }

这处理了以下奇怪的情况,我看到它们尝试了以前的答案:

  • 非单词字符,例如-
  • 诸如é
  • 之类的名称中常见的重音字符
  • 字符串中间的大写字母