HOWTO · Ruby

在 Ruby 中将字符串转换为小写或大写

本文展示了如何在 Ruby 中将字符串转换为小写或大写

本页内容

Ruby 提供了 downcase 和 upcase,可返回字母已转换为小写或大写的字符串。对应的 bang 方法 downcase! 和 upcase! 会在需要转换时修改接收者。若要保留原值,请使用非 bang 方法;若确实要修改该字符串,则使用 bang 方法。

使用 downcase 将字符串转换为小写

对字符串调用 downcase,即可获得小写形式。该方法会返回一个字符串,不会修改接收者,因此你可以继续使用原值,也可以将返回结果赋给新变量。当你要规范化输入以便比较,同时保留用户输入的原文时,这种做法很有用。

运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

original = "Hello, Ruby!"
lowercase = original.downcase
puts lowercase
puts original
hello, ruby!
Hello, Ruby!

Ruby 也会对字符串中受支持的非 ASCII 字符应用大小写映射。例如,对于 UTF-8 字符串,"Ä".downcase 会得到 "ä"。大小写映射依据语言数据,并不保证遵循特定地区的拼写或排序规则;如果应用需要这些规则,请使用支持地区设置的库。

使用 upcase 将字符串转换为大写

使用 upcase 可执行相应的大写转换。与 downcase 一样,它会返回转换后的字符串,而不会修改接收者。如果后续代码需要使用大写形式,请将返回值赋给变量;如果原变量的大小写需要保留,则继续使用原变量。

本节中的代码以及显示的标签或输出仍为英文。

original = "Hello, Ruby!"
uppercase = original.upcase
puts uppercase
puts original
HELLO, RUBY!
Hello, Ruby!

这两个方法会保留空格和标点等非字母字符。它们只转换字母的大小写,不会删除空白字符或以其他方式规范化字符串。

如何选择返回新字符串还是原地修改

如果需要修改接收者本身,请使用 downcase! 或 upcase!。bang 方法在实际发生修改时会返回修改后的字符串。如果接收者已经是目标大小写,方法会返回 nil,因为没有发生修改。因此,不要假设 bang 方法每次都会返回字符串。

本节中的代码以及显示的标签或输出仍为英文。

word = "Ruby"
changed = word.downcase!
puts word
puts changed

already_lowercase = "ruby"
result = already_lowercase.downcase!
puts result.inspect
ruby
ruby
nil

最后一行特意使用 inspect 显示返回值,因此没有发生修改时可以看到 nil。无论哪种情况,字符串都仍可使用:bang 方法成功转换后,字符串中是转换后的文本;如果无需转换,字符串则保持原样。这些方法的区别在于是否修改原对象。本文不对速度或内存作出保证;应根据修改现有对象是否适合周边代码来选择方法。

检查字符串是否已经是小写或大写

将字符串与转换结果进行比较即可检查其大小写。若它等于调用 downcase 的结果,就表示按照 Ruby 的映射规则,该字符串已经是小写;与调用 upcase 的结果比较,则可检查相应的大写形式。这是一种直接验证大小写要求的方式,而且不会修改原值。

本节中的代码以及显示的标签或输出仍为英文。

value = "ruby"
puts(value == value.downcase)
puts(value == value.upcase)
true
false

这种比较只检查大小写,不会删除开头或结尾的空格,也不能依据所有语言的排序规则判断两个字符串是否等价。如果输入还需要去除空白,或需要按特定地区规则比较,请分别明确处理这些要求。