【问题标题】:Ruby equivalent of PHP's ucfirst() functionRuby 等效于 PHP 的 ucfirst() 函数
【发布时间】:2009-09-25 23:22:29
【问题描述】:

在 Ruby(使用 Rails,如果相关)中,将字符串的第一个字母大写的最佳方法是什么?

请注意,String#capitalize 不是我想要的,因为除了将字符串的第一个字母大写外,此函数还使所有其他字符小写(我不想要 - 我想让它们保持不变):

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

【问题讨论】:

    标签: ruby-on-rails ruby string


    【解决方案1】:

    在 Rails 中,您有 String#titleize 方法:

    "测试字符串标题化方法".titleize #=> "测试字符串标题化方法"

    【讨论】:

    • 请注意titleize 会进行其他更改,例如在CamelCase 单词中插入空格。
    【解决方案2】:

    你可以使用“sub”来得到你想要的(注意:我没有用多字节字符串测试过)

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

    (如果你愿意,当然也可以通过monkeypatch String 将其添加为方法)

    【讨论】:

      【解决方案3】:

      第一个字符大写,并保存回字符串中

      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
      

      【讨论】:

        【解决方案4】:

        如果不想修改原字符串,可以这样:

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

        【讨论】:

          【解决方案5】:

          我提出以下解决方案,通过空格起作用

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

          【讨论】:

            【解决方案6】:

            【讨论】:

              【解决方案7】:

              如果你正在寻找一个真正类似于 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
              

              【讨论】:

                【解决方案8】:

                看看这个。

                capitalizing-first-letter-of-each-word

                没有内置函数。您需要拆分字母并重新加入或尝试 Rails 的 String#titleize 看看它是否符合您的要求。

                【讨论】:

                  【解决方案9】:

                  那一个班轮不依赖于 ActiveSupport。但不确定它是否完全防弹:

                  "my great uncle and grand-ma".gsub(/(\A\w|\s\w)/) { |m| m.upcase }
                  # My Great Uncle And Grand-ma
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-06-22
                    • 2010-11-07
                    • 2012-11-27
                    • 2010-10-15
                    • 2020-04-21
                    • 2012-09-20
                    • 1970-01-01
                    相关资源
                    最近更新 更多