让我们想象一下,我们有一个简单的抽象输入形式,其目的是接受一些字符串,可以包含任何字符。
string = "mystical characters"
我们需要通过使第一个字符大写来处理这个字符串。是的,这是我们的主要目标。此后,我们需要在一些抽象视图模板中显示此转换后的字符串。所以,问题是:我们真的需要检查第一个字符是否已经正确写入(大写)或者我们能够写出这个吗?
theresult = string.capitalize
=> "Mystical characters"
哪种方法更好:检查然后大写(如果需要)或强制大写?
答案 0 :(得分:7)
首先检查是否需要处理某些内容,因为String#capitalize不仅将第一个字符转换为大写,而且还将所有其他字符转换为小写。所以..
"First Lastname".capitalize == "First lastname"
这可能不是想要的结果。
答案 1 :(得分:4)
如果我理解正确你无论如何都会把字符串大写,那么为什么还要检查它是否已经大写了?
答案 2 :(得分:2)
基于Tonttu answer我建议不要太担心,只需像这样大写:
new_string = string[0...1].capitalize + string[1..-1]
答案 3 :(得分:1)
我跑到Tonttu导致一堆名字的问题,我选择了:
strs = "first lastname".split(" ")
return_string = ""
strs.each do |str|
return_string += "#{str[0].upcase}#{str[1..str.length].downcase} "
end
return_string.chop
编辑:不可避免的重构(超过一年)。
"first lastname".split(" ").map do |str|
"#{str[0].upcase}#{str[1..str.length].downcase}"
end.join(' ')
虽然绝对不容易阅读,但在声明更少的临时变量时会得到相同的结果。
答案 4 :(得分:0)
我猜你可以这样写:
string.capitalize unless string =~ /^[A-Z].*/
我个人会这样做
string.capitalize
答案 5 :(得分:0)
除非您要为要检查的大写字符串设置一个标志,否则只需大写而不检查。
此外,大写本身可能正在进行一些检查。