Ruby的等价于PHP的ucfirst()函数

问题描述:

Ruby中的最佳方式是什么(使用Rails,如果相关的话)将字符串的首字母大写?Ruby的等价于PHP的ucfirst()函数

请注意,String#capitalize是不是我想要的,除了大写字母的第一个字母,此功能使所有其他字符小写(我不想 - 我想让它们保持原样) :

>> "a A".capitalize 
=> "A a" 

你可以用“子”得到你想要的东西(注:我还没有和多字节字符串测试这个)

"a A".sub(/^(\w)/) {|s| s.capitalize} 

(你当然可以猴补丁字符串添加这个犹如方法你喜欢)

看一看这一点。

capitalizing-first-letter-of-each-word

这里没有一个内置功能。你需要拆分这些字母并重新加入,或者试试Rails的String#titleize,看看它是否做到了你想要的。

在Rails你有String#titleize方法:

“测试串titleize法” .titleize#=> “测试管柱titleize法”

+3

要意识到'ti tleize'进行其他更改,例如在[CamelCase](https://en.wikipedia.org/wiki/CamelCase)文字中插入空格。 – cjm 2013-08-08 16:35:14

大写的第一个字符,并保存它放回串

s = "a A" 
s[0] = s[0,1].upcase 
p s # => "A A" 

或者,

class String 
    def ucfirst! 
    self[0] = self[0,1].upcase 
    self 
    end 
end 

如果你不想修改原始字符串,你可以这样来做:

class String 
    def ucfirst 
    str = self.clone 
    str[0] = str[0,1].upcase 
    str 
    end 
end 

如果你正在寻找一个真正的类似功能,PHP的ucfirst()尝试

"a A".gsub(/(\w+)/) {|s| s.capitalize} 

将导致“A A”。

"a neW APPROACH".gsub(/(\w+)/) {|s| s.capitalize} 

将导致“A New Approach”。

可以扩展String类有:

class String 
    def ucfirst 
    self.gsub(/(\w+)/) { |s| s.capitalize } 
    end 

    def ucfirst! 
    self.gsub!(/(\w+)/) { |s| s.capitalize } 
    end 
end 

我提出以下解决方案,致力于通过空白

' ucfirstThis'.sub(/\w/, &:capitalize) 
# => "UcfirstThis"