2009-09-25 108 views
8

Ruby中的最佳方式是什麼(使用Rails,如果相關的話)將字符串的首字母大寫?Ruby的等價於PHP的ucfirst()函數

請注意,String#capitalize是不是我想要的,除了大寫字母的第一個字母,此功能使所有其他字符小寫(我不想 - 我想讓它們保持原樣) :

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

回答

15

你可以用「子」得到你想要的東西(注:我還沒有和多字節字符串測試這個)

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

(你當然可以猴補丁字符串添加這個猶如方法你喜歡)

0

看一看這一點。

capitalizing-first-letter-of-each-word

這裏沒有一個內置功能。你需要拆分這些字母並重新加入,或者試試Rails的String#titleize,看看它是否做到了你想要的。

14

在Rails你有String#titleize方法:

「測試串titleize法」 .titleize#=> 「測試管柱titleize法」

+3

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

6

大寫的第一個字符,並保存它放回串

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 
3

如果你不想修改原始字符串,你可以這樣來做:

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

如果你正在尋找一個真正的類似功能,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 
0

我提出以下解決方案,致力於通過空白

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