【问题标题】:Ruby on Rails uncapitalize first letterRuby on Rails 取消首字母大写
【发布时间】:2011-05-27 07:39:11
【问题描述】:

我正在运行 Rails 2.3.2。

如何将"Cool" 转换为"cool"?我知道"Cool".downcase 有效,但是是否有与capitalize 相反的Ruby/Rails 方法,即uncapitalizedecapitalize

【问题讨论】:

    标签: ruby-on-rails ruby lowercase capitalize


    【解决方案1】:

    没有真正的大写反转,但我认为underscore 很接近。

    "CoolCat".underscore  #=> "cool_cat"
    "cool_cat".capitalize #=> "Cool_cat"
    "cool_cat".camelize   #=> "CoolCat"
    

    编辑: underscore 当然是 camelize 的倒数,而不是 capitalize

    【讨论】:

      【解决方案2】:

      capitalize 没有逆元,但您可以随意滚动:

      class String
        def uncapitalize 
          self[0, 1].downcase + self[1..-1]
        end
      end
      

      【讨论】:

      • 我们应该在哪里添加这个方法?
      • @Vadorequest 方法?将其添加到String类上,如答案所示。
      • 在标准的 Rails 应用程序中,将其添加到 /config/initializers 中的新文件可能是有意义的
      • @Ajedi32 好吧,这对你来说可能很明显,但对我来说不是。谢谢戴夫。
      【解决方案3】:

      如果你使用 Ruby Facets,你可以将第一个字母小写:

      https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/uppercase.rb

      【讨论】:

        【解决方案4】:

        还有:

        "coolat_cat".camelize(:lower) # => "coolCat"
        

        【讨论】:

        【解决方案5】:

        您也可以使用简单的sub

        "Cool".sub(/^[A-Z]/) {|f| f.downcase }
        

        【讨论】:

        • 注意"Cool".sub(/^[A-Z]/, &:downcase)就够了
        • "CoolTrick".sub(/^[[:alpha:]]/) {|f| f.downcase }
        【解决方案6】:
        str = "Directly to the south"
        str[0] = str[0].downcase
        puts str
        #=> "directly to the south"
        

        【讨论】:

        • 这不仅是最易读的方法,也是迄今为止性能最高的方法,即使你用某种三元运算符或 if 语句保护它以确保 str 不为零。这应该是公认的答案。谢谢@boulder_ruby
        【解决方案7】:

        您可以使用点击(使其适合一行):

        "JonSkeet".tap { |e| e[0] = e[0].downcase } # => "jonSkeet"
        

        【讨论】:

          【解决方案8】:

          capitalize 的倒数称为swapcase

          "Cool Cat".swapcase   #=> "cOOL cAT"
          

          【讨论】:

            【解决方案9】:
            name = "Viru"
            
            name = name.slice(0).downcase + name[1..(name.length)]
            

            【讨论】:

              【解决方案10】:

              试试这个

              'Cool'.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') }
              

              https://apidock.com/ruby/XSD/CodeGen/GenSupport/uncapitalize

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-11-11
                • 2021-07-29
                • 2011-05-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-06-16
                • 2021-11-02
                相关资源
                最近更新 更多