【问题标题】:Capitalization of strings字符串的大小写
【发布时间】:2011-01-20 01:39:12
【问题描述】:

让我们想象一下,我们有一个简单的抽象输入表单,其目的是接受一些字符串,它可以由任何字符组成。

string = "mystical characters"

我们需要通过将第一个字符大写来处理这个字符串。是的,这是我们的主要目标。此后,我们需要在一些抽象视图模板中显示这个转换后的字符串。所以,问题是:我们真的需要检查第一个字符是否已经正确写入(大写)还是我们可以只写这个?

theresult = string.capitalize
=> "Mystical characters"

哪种方法更好:检查然后大写(如果需要)还是强制大写?

【问题讨论】:

  • 我认为您担心的事情有点太深奥了。如果您的主要目标是使第一个字符大写,那就这样做吧。

标签: ruby string capitalization


【解决方案1】:

如果您需要处理某些内容,请先检查,因为String#capitalize 不仅将第一个字符转换为大写,而且还将所有其他字符转换为小写。所以..

"First Lastname".capitalize == "First lastname"

这可能不是想要的结果。

【讨论】:

    【解决方案2】:

    如果我理解正确,你还是要把字符串大写,那么为什么还要检查它是否已经大写呢?

    【讨论】:

    • 是的,你是对的。但我担心这两种方法的利弊。我想,其中一个可能比另一个更可取(更少的内存使用等)。
    • 如果你总是大写,你总是会得到一个操作。如果你检查然后大写你将有两个操作。在这个水平上进行基准测试是没有意义的。就像 Knuth 所说的“过早的优化是万恶之源”
    • 如果您非常担心优化,我认为您使用了错误的语言(我认为):P 如果您将已经大写的字符串大写,那么您很可能得到相同的字符串。跨度>
    【解决方案3】:

    基于Tonttu answer,我建议不要太担心,只需像这样大写:

    new_string = string[0...1].capitalize + string[1..-1]
    

    【讨论】:

      【解决方案4】:

      我在导入一堆名字时遇到了 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(' ')
      

      虽然绝对不是更容易阅读,但它在声明更少的临时变量的同时获得相同的结果。

      【讨论】:

        【解决方案5】:

        我猜你可以这样写:

        string.capitalize unless string =~ /^[A-Z].*/
        

        我个人会这样做

        string.capitalize

        【讨论】:

          【解决方案6】:

          除非您要为要检查的大写字符串设置一个标志,而不是只大写而不检查。

          大写本身也可能正在执行一些检查。

          【讨论】:

            猜你喜欢
            • 2016-01-25
            • 1970-01-01
            • 1970-01-01
            • 2020-09-13
            • 1970-01-01
            • 1970-01-01
            • 2011-01-16
            • 2019-11-22
            • 1970-01-01
            相关资源
            最近更新 更多