使用 Ruby class:大写字符串
Working with Ruby class: Capitalizing a 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."
尝试:
def toJadenCase
self.split.map(&:capitalize).join(' ')
end
我建议你不要通过添加实例方法来污染核心 String
class。相反,只需向方法添加一个参数来保存字符串。您可以按如下方式执行此操作,方法是将字符串缩小,然后将 gsub
与正则表达式一起使用。
def to_jaden_case(str)
str.downcase.gsub(/(?<=\A| )[a-z]/) { |c| c.upcase }
end
to_jaden_case "The moMent That trUth is organized, it becomes a lie."
#=> "The Moment That Truth Is Organized, It Becomes A Lie."
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
(?<=\A| )
可以替换为 negative lookbehind (?<![^ ])
,它断言匹配前面没有 [=41 以外的字符=].
请注意,通过将 String#gsub 与正则表达式一起使用(不同于 split-process-join dance),额外space 已保留。
当要用正则表达式匹配 spaces 时,通常会看到白色 spaces (\s
) 被匹配。例如,这里 /(?<=\A|\s)[a-z]/
工作正常,但有时匹配 whitespaces 会导致问题,主要是因为它们也匹配换行符(\n
)(以及 spaces 、制表符和其他一些字符)。我的建议是如果要匹配 space 个字符,则匹配 space 个字符。如果还要匹配制表符,请使用字符 class ([ \t]
).
我正在努力了解如何在 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."
尝试:
def toJadenCase
self.split.map(&:capitalize).join(' ')
end
我建议你不要通过添加实例方法来污染核心 String
class。相反,只需向方法添加一个参数来保存字符串。您可以按如下方式执行此操作,方法是将字符串缩小,然后将 gsub
与正则表达式一起使用。
def to_jaden_case(str)
str.downcase.gsub(/(?<=\A| )[a-z]/) { |c| c.upcase }
end
to_jaden_case "The moMent That trUth is organized, it becomes a lie."
#=> "The Moment That Truth Is Organized, It Becomes A Lie."
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
(?<=\A| )
可以替换为 negative lookbehind (?<![^ ])
,它断言匹配前面没有 [=41 以外的字符=].
请注意,通过将 String#gsub 与正则表达式一起使用(不同于 split-process-join dance),额外space 已保留。
当要用正则表达式匹配 spaces 时,通常会看到白色 spaces (\s
) 被匹配。例如,这里 /(?<=\A|\s)[a-z]/
工作正常,但有时匹配 whitespaces 会导致问题,主要是因为它们也匹配换行符(\n
)(以及 spaces 、制表符和其他一些字符)。我的建议是如果要匹配 space 个字符,则匹配 space 个字符。如果还要匹配制表符,请使用字符 class ([ \t]
).