Como converter uma string para letras minúsculas ou maiúsculas em Ruby


Respostas:


1590

Ruby tem alguns métodos para mudar o caso de strings. Para converter em minúsculas, use downcase:

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

Da mesma forma, upcasecoloca em maiúscula todas as letras e em capitalizemaiúscula a primeira letra da string, mas em minúsculas o restante:

"hello James!".upcase      #=> "HELLO JAMES!"
"hello James!".capitalize  #=> "Hello james!"
"hello James!".titleize    #=> "Hello James!"

Se você deseja modificar uma sequência no lugar, você pode adicionar um ponto de exclamação a qualquer um desses métodos:

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

Consulte a documentação para String para obter mais informações.


2
Só pensei nisso depois de responder, mas darei a você o crédito por dedicar algum tempo para responder de qualquer maneira. Obrigado!
Heat Miser

3
Cuidado! parece-me como usar o estrondo "!" retornará nulo se não houver letra maiúscula. então str = "this" .downcase! retorna str = nil
Phil_Ken_Sebben

12
Muitas vezes, "métodos estrondosos" retornam nil; você deve usá-los se desejar alterar um objeto no lugar, não se desejar armazenar o valor em outra variável.
Sophie Alpert

6
.titleizeé do Rails. Não pode encontrá-lo em ruby Stringdocumentação
ronald8192

3
titleizeprecisa ser removido desta resposta ou, pelo menos, declarar que é um método Rails.
precisa saber é o seguinte

122

Você pode descobrir todos os métodos disponíveis em uma String abrindo irb e executando:

"MyString".methods.sort

E para uma lista dos métodos disponíveis para seqüências de caracteres em particular:

"MyString".own_methods.sort

Eu uso isso para descobrir coisas novas e interessantes sobre objetos que, de outra forma, eu nem sabia que existiam.


12
O único problema com esta resposta é que #own_methods não parece existir. É de uma extensão Irb?
Mark Wilden

12
Oi - Eu pensei que estava aprendendo algo novo com os #own_methods, mas não existe para mim também. No entanto, eu geralmente vou: ("MyString" .methods - Object.merhods) .sort
oceanician

2
Muito parecido com o patch @fakeleft mencionado, e eu o tenho no meu arquivo .irbrc. Eu penso macaco objecto e criar #own_methds com esta: (obj.methods - obj.class.superclass.instance_methods) .Sort
mlambie

1
@Laser Os métodos para String, em particular, são os definidos na própria classe String. Os métodos disponíveis em uma String incluem os definidos em suas superclasses.
Fund Monica's Lawsuit

1
Use String.public_instance_methods(false)para encontrar todos os métodos de instância pública definidos especificamente por String.
3limin4t0r

39

Como o @endeR mencionado, se a internacionalização for uma preocupação, a gema unicode_utils é mais do que adequada.

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

Manipulações de string no Ruby 2.4 agora são sensíveis a unicode.



12

... e a maiúscula é:

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

12

O Rails gem Active Support fornece upcase, downcase, swapcase, capitalize, etc. métodos com suporte a internacionalização:

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

1

Você pode encontrar método de cordas como "strings".methods você pode definir string como upcase, downcase, titleize. Por exemplo,

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

1

O método .swapcase transforma as letras maiúsculas em uma seqüência de caracteres em minúsculas e as letras minúsculas em maiúsculas.

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

1
Obrigado! Era exatamente isso que eu estava procurando. Uma seqüência de letras maiúsculas e minúsculas pode torná-lo mais óbvio exatamente o que este método faz ...'Testing'.swapcase #=> tESTING
Matthew


0

Não vai funcionar para todos, mas isso me salvou um monte de tempo. Eu apenas tive o problema com um CSV retornando "TRUE ou" FALSE ", então acabei de adicionar VALUE.to_s.downcase ==" true ", que retornará o boolean true se o valor for" TRUE "e false se o valor for" FALSE ", mas ainda funcionará para o booleano true e false.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.