ChatGPT解决这个技术问题 Extra ChatGPT

How to convert a string to lower or upper case in Ruby

How do I take a string and convert it to lower or upper case in Ruby?


g
ggorlen

Ruby has a few methods for changing the case of strings. To convert to lowercase, use downcase:

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

Similarly, upcase capitalizes every letter and capitalize capitalizes the first letter of the string but lowercases the rest:

"hello James!".upcase      #=> "HELLO JAMES!"
"hello James!".capitalize  #=> "Hello james!"
"hello James!".titleize    #=> "Hello James!" (Rails/ActiveSupport only)

If you want to modify a string in place, you can add an exclamation point to any of those methods:

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

Refer to the documentation for String for more information.


Watch out! looks to me like using the bang "!" will return nil if there's no capital letter. so str = "this".downcase! returns str = nil
Oftentimes, "bang methods" return nil; you should use them if you want to change an object in place, not if you want to store the value in another variable.
but it'is a problem in "i" char if you are using utf-8. For instance, string = FEN BİLİMLERİ. string.capitalize must be "Fen bİlİmlerİ" or it could be changed because of css font style choice.
'coração'.upcase produces 'CORAçãO'. It may be advised to use some gem like “unicode_utils“, “activesupport“ or “Unicode”.
m
mlambie

You can find out all the methods available on a String by opening irb and running:

"MyString".methods.sort

And for a list of the methods available for strings in particular:

"MyString".own_methods.sort

I use this to find out new and interesting things about objects which I might not otherwise have known existed.


The only problem with this answer is that #own_methods doesn't appear to exist. Is it from an Irb extension?
Hi - I thought I was learning something new with the #own_methods then, but it doesn't exist for me either. However, I usually go: ("MyString".methods - Object.merhods).sort
Very similar to the patch @fakeleft referenced, and I have it in my .irbrc file. I monkey patch Object and create #own_methds with this: (obj.methods - obj.class.superclass.instance_methods).sort
@Laser The methods for String in particular are the ones defined in the String class itself. The methods available on a String include the ones defined in its superclass(es).
Use String.public_instance_methods(false) to find all public instance methods specifically defined by String.
t
the Tin Man

Like @endeR mentioned, if internationalization is a concern, the unicode_utils gem is more than adequate.

$ gem install unicode_utils
$ irb
> require 'unicode_utils'
=> true
> UnicodeUtils.downcase("FEN BİLİMLERİ", :tr)
=> "fen bilimleri"

String manipulations in Ruby 2.4 are now unicode-sensitive.


T
Toma Nistor

The ruby downcase method returns a string with its uppercase letters replaced by lowercase letters.

"string".downcase

https://ruby-doc.org/core-2.1.0/String.html#method-i-downcase


While technically this does help answer the question, it really should be more illuminating. Show the result perhaps? Maybe a link to the documentation?
m
mlambie

... and the uppercase is:

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

t
the Tin Man

The Rails Active Support gem provides upcase, downcase, swapcase,capitalize, etc. methods with internationalization support:

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

R
Rajkumar Ulaganadhan

The .swapcase method transforms the uppercase latters in a string to lowercase and the lowercase letters to uppercase.

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

Thanks! This is exactly what I was looking for. A mixed case string might make it more obvious exactly what this method does... 'Testing'.swapcase #=> tESTING
F
Foram

You can find strings method like "strings".methods You can define string as upcase, downcase, titleize. For Example,

"hii".downcase
"hii".titleize
"hii".upcase

m
mmichaa

Since Ruby 2.4 there is a built in full Unicode case mapping. Source: https://stackoverflow.com/a/38016153/888294. See Ruby 2.4.0 documentation for details: https://ruby-doc.org/core-2.4.0/String.html#method-i-downcase


M
Mason SB

Won't work for every, but this just saved me a bunch of time. I just had the problem with a CSV returning "TRUE or "FALSE" so I just added VALUE.to_s.downcase == "true" which will return the boolean true if the value is "TRUE" and false if the value is "FALSE", but will still work for the boolean true and false.


s
sɐunıɔןɐqɐp

In combination with try method, to support nil value:

'string'.try(:upcase)
'string'.try(:capitalize)
'string'.try(:titleize)