使用Ruby类:将字符串大写

使用Ruby类:将字符串大写,ruby,string,capitalize,Ruby,String,Capitalize,我正试图了解如何使用Ruby中的类,如果能在这方面有所了解,我将不胜感激。目前,我有一个相当简单的任务来转换每个单词开头大写的字符串。例如: Not Jaden-Cased: "How can mirrors be real if our eyes aren't real" Jaden-Cased: "How Can Mirrors Be Real If Our Eyes Aren't Real" 这是我目前的代码: class String

我正试图了解如何使用Ruby中的类,如果能在这方面有所了解,我将不胜感激。目前,我有一个相当简单的任务来转换每个单词开头大写的字符串。例如:

Not Jaden-Cased: "How can mirrors be real if our eyes aren't real"
Jaden-Cased:     "How Can Mirrors Be Real If Our Eyes Aren't Real"
这是我目前的代码:

class String
  def toJadenCase
    split
    capitalize

  end
end

#=> usual case: split.map(&:capitalize).join(' ')


输出:

Expected: "The Moment That Truth Is Organized It Becomes A Lie.",
 instead got: "The moment that truth is organized it becomes a lie."
尝试:


我建议您不要通过添加实例方法来污染核心
String
类。相反,只需向方法添加一个参数来保存字符串。您可以按如下方式执行此操作,方法是将字符串下套管,然后将
gsub
与正则表达式一起使用

def to_jaden_case(str)
  str.downcase.gsub(/(?<=\A| )[a-z]/) { |c| c.upcase } 
end
Ruby的正则表达式引擎执行以下操作

(?<=\A| )  : use a positive lookbehind to assert that the following match
             is immediately preceded by the start of the string or a space 
[a-z]      : match a lowercase letter
(?请注意,通过与正则表达式一起使用(与拆分进程join dance不同),可以保留额外的空格


当用正则表达式匹配空格时,通常会看到匹配的是空格(
\s
)/(?我不知道你在问什么或者你现在期望什么。你现在
拆分
字符串并扔掉结果,然后返回大写字符串。实际有效的代码似乎是所有代码下面的注释。哈哈,我想我在使用Classdon't need
self
,顺便说一句时必须分离方法。LOOL ffs我认为课堂的效果不同,但现在明白了,你不需要把它传给论点,因为论点已经被创造出来了。Cheers mateRegex现在让我害怕=/,但这是不可避免的,我将不得不在某个时候学习它。我猜一位智者曾经说过:“除了恐惧本身和正则表达式之外,没有什么可怕的。”。是的,使用正则表达式需要一点时间,但从某种意义上说,正则表达式是一种相当简单的计算机语言,与大多数其他语言相比,它的方法要少得多。您最需要的是基础知识,包括捕获组、非捕获组、正面和负面lookbehind和lookaheads以及命名捕获。还有其他一些功能是owerful,比如
\K
\G
,但他们可以等待。一些程序员觉得他们很有趣,尽管这有时与人格障碍有关。哈哈,朋友,我一定会把时间放在一边研究一下!
to_jaden_case "The moMent      That trUth is organized, it becomes a lie."
  #=> "The Moment      That Truth Is Organized, It Becomes A Lie."
(?<=\A| )  : use a positive lookbehind to assert that the following match
             is immediately preceded by the start of the string or a space 
[a-z]      : match a lowercase letter