【发布时间】:2009-09-25 23:22:29
【问题描述】:
在 Ruby(使用 Rails,如果相关)中,将字符串的第一个字母大写的最佳方法是什么?
请注意,String#capitalize 不是我想要的,因为除了将字符串的第一个字母大写外,此函数还使所有其他字符小写(我不想要 - 我想让它们保持不变):
>> "a A".capitalize
=> "A a"
【问题讨论】:
标签: ruby-on-rails ruby string
在 Ruby(使用 Rails,如果相关)中,将字符串的第一个字母大写的最佳方法是什么?
请注意,String#capitalize 不是我想要的,因为除了将字符串的第一个字母大写外,此函数还使所有其他字符小写(我不想要 - 我想让它们保持不变):
>> "a A".capitalize
=> "A a"
【问题讨论】:
标签: ruby-on-rails ruby string
在 Rails 中,您有 String#titleize 方法:
"测试字符串标题化方法".titleize #=> "测试字符串标题化方法"
【讨论】:
titleize 会进行其他更改,例如在CamelCase 单词中插入空格。
你可以使用“sub”来得到你想要的(注意:我没有用多字节字符串测试过)
"a A".sub(/^(\w)/) {|s| s.capitalize}
(如果你愿意,当然也可以通过monkeypatch String 将其添加为方法)
【讨论】:
第一个字符大写,并保存回字符串中
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
【讨论】:
我提出以下解决方案,通过空格起作用
' ucfirstThis'.sub(/\w/, &:capitalize)
# => "UcfirstThis"
【讨论】:
从轨道 5 开始:
"a A".upcase_first
=> "A A"
http://api.rubyonrails.org/v5.1/classes/ActiveSupport/Inflector.html#method-i-upcase_first
【讨论】:
如果你正在寻找一个真正类似于 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
【讨论】:
看看这个。
capitalizing-first-letter-of-each-word
没有内置函数。您需要拆分字母并重新加入或尝试 Rails 的 String#titleize 看看它是否符合您的要求。
【讨论】:
那一个班轮不依赖于 ActiveSupport。但不确定它是否完全防弹:
"my great uncle and grand-ma".gsub(/(\A\w|\s\w)/) { |m| m.upcase }
# My Great Uncle And Grand-ma
【讨论】: