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

1219
在Ruby中,如何将字符串转换为小写或大写?
11个回答

1766

Ruby有几个用于更改字符串大小写的方法。要转换为小写,请使用downcase

"hello James!".downcase    #=> "hello james!"

同样,upcase 会将每个字母都转化为大写,而capitalize仅将字符串的第一个字母转化为大写,其余字母转化为小写:

"hello James!".upcase      #=> "HELLO JAMES!"
"hello James!".capitalize  #=> "Hello james!"
"hello James!".titleize    #=> "Hello James!" (Rails/ActiveSupport only)
如果你想原地修改一个字符串,你可以在任何这些方法上加上感叹号:
string = "hello James!"
string.downcase!
string   #=> "hello james!"

更多信息请参考String文档.


4
小心!我看使用感叹号 "!" 看起来会在没有大写字母的情况下返回 nil。因此, str = "this".downcase! 会返回 str = nil。 - Phil_Ken_Sebben
16
通常,“bang方法”会返回nil;如果你想就地修改一个对象,而不是将值存储在另一个变量中,你应该使用它们。 - Sophie Alpert
但如果您使用UTF-8,则“i”字符会成为一个问题。例如,字符串= FEN BİLİMLERİ。string.capitalize必须是“Fen bİlİmlerİ”,或者它可能因为CSS字体样式的选择而更改。 - eayurt
'coração'.upcase 会生成 'CORAçãO'。建议使用一些宝石库如“unicode_utils”,“activesupport”或“Unicode”。 - Fernando Basso

128

你可以通过打开irb并运行以下命令来查找字符串可用的所有方法:

"MyString".methods.sort

此外,这里提供了字符串可用方法的列表:

"MyString".own_methods.sort

我使用这个方法来发现关于对象的新奇有趣的事情,否则我可能不知道它们存在。


12
这个回答唯一的问题是 #own_methods 似乎不存在。它来自于 Irb 扩展吗? - Mark Wilden
12
嗨 - 我本以为自己能从#own_methods中学到点新东西,但我也没找到这个方法。不过,通常我会这样做: ("MyString".methods - Object.methods).sort - oceanician
2
非常类似于@fakeleft提到的补丁,我在我的.irbrc文件中也有它。我猴子补丁Object并创建#own_methds:(obj.methods - obj.class.superclass.instance_methods)。sort - mlambie
1
@Laser 特别是针对 String 的方法是在 String 类本身中定义的。String 上可用的方法包括其超类中定义的方法。 - anon
1
使用String.public_instance_methods(false)来查找String类中所有明确定义的公共实例方法。 - 3limin4t0r
显示剩余5条评论

41

如 @endeR 所提到的,如果国际化是一个问题,unicode_utils gem 就已经足够了。

$ gem install unicode_utils
$ irb
> require 'unicode_utils'
=> true
> UnicodeUtils.downcase("FEN BİLİMLERİ", :tr)
=> "fen bilimleri"
Ruby 2.4中的字符串操作现在支持Unicode。

23

Ruby字符串转换在这里:http://www.techotopia.com/index.php/Ruby_String_Conversions - TStamper
2
虽然从技术上来说这确实回答了问题,但它应该更具有启发性。可以展示结果吗?或者提供文档链接? - the Tin Man

15

...并且大写字母是:

"Awesome String".upcase
=> "AWESOME STRING"

14

Rails Active Support gem 提供了 upcase, downcase, swapcase,capitalize 等方法,并支持国际化:

gem install activesupport
irb -ractive_support/core_ext/string
"STRING  ÁÂÃÀÇÉÊÍÓÔÕÚ".mb_chars.downcase.to_s
 => "string  áâãàçéêíóôõú"
"string  áâãàçéêíóôõú".mb_chars.upcase.to_s
=> "STRING  ÁÂÃÀÇÉÊÍÓÔÕÚ"

8

.swapcase方法将字符串中的大写字母转换为小写字母,小写字母转换为大写字母。

'TESTING'.swapcase #=> testing
'testing'.swapcase #=> TESTING

2
谢谢!这正是我在寻找的。一个混合大小写字符串可能会更明显地说明这个方法的作用... 'Testing'.swapcase #=> tESTING - Matthew

2
你可以通过"strings".methods方法找到字符串的方法。 你可以使用upcasedowncasetitleize来定义字符串。 例如,
"hii".downcase
"hii".titleize
"hii".upcase

1

虽然不是适用于每种情况,但这个方法刚刚帮我省了很多时间。我遇到了一个CSV返回“TRUE”或“FALSE”的问题,所以我只需添加VALUE.to_s.downcase ==“true”,如果值为“TRUE”,则返回布尔值true,如果值为“FALSE”,则返回false,但仍可用于布尔值true和false。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接