Cómo convertir una cadena a minúsculas o mayúsculas en Ruby

Respuestas:

1590

Ruby tiene algunos métodos para cambiar el caso de las cadenas. Para convertir a minúsculas, use downcase:

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

Del mismo modo, upcaseescribe en mayúscula cada letra y capitalizeescribe en mayúscula la primera letra de la cadena, pero en minúscula el resto:

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

Si desea modificar una cadena en su lugar, puede agregar un signo de exclamación a cualquiera de esos métodos:

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

Consulte la documentación de String para obtener más información.

Sophie Alpert
fuente
2
Solo pensé en eso después de haberlo respondido, pero te daré la credibilidad por tomarte el tiempo para responder de todos modos. ¡Gracias!
Heat Miser
3
¡Cuidado! me parece que usa la explosión "!" devolverá cero si no hay mayúscula. así que str = "this" .downcase! devuelve str = nil
Phil_Ken_Sebben
12
A menudo, regresan los "métodos de explosión" nil; debe usarlos si desea cambiar un objeto en su lugar, no si desea almacenar el valor en otra variable.
Sophie Alpert
66
.titleizeEs de Rails. No puedo encontrarlo en la Stringdocumentación de ruby
ronald8192
3
titleizedebe eliminarse de esta respuesta o al menos indicar que es un método Rails.
Sagar Pandya
122

Puede encontrar todos los métodos disponibles en una Cadena abriendo irb y ejecutando:

"MyString".methods.sort

Y para obtener una lista de los métodos disponibles para cadenas en particular:

"MyString".own_methods.sort

Utilizo esto para descubrir cosas nuevas e interesantes sobre objetos que de otro modo no habría sabido que existían.

mlambie
fuente
12
El único problema con esta respuesta es que #own_methods no parece existir. ¿Es de una extensión Irb?
Mark Wilden
12
Hola, pensé que estaba aprendiendo algo nuevo con los #own_methods entonces, pero tampoco existe para mí. Sin embargo, generalmente voy: ("MyString" .methods - Object.merhods) .sort
oceanician
2
Muy similar al parche @fakeleft al que se hace referencia, y lo tengo en mi archivo .irbrc. Monkey Object y creo #own_methds con esto: (obj.methods - obj.class.superclass.instance_methods) .sort
mlambie
1
@Laser Los métodos para String en particular son los definidos en la propia clase String. Los métodos disponibles en una cadena incluyen los definidos en su (s) superclase (s).
Financia la demanda de Mónica
1
Se usa String.public_instance_methods(false)para buscar todos los métodos de instancia pública definidos específicamente por String.
3limin4t0r
39

Como mencionó @endeR, si la internacionalización es una preocupación, la gema unicode_utils es más que adecuada.

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

Las manipulaciones de cadenas en Ruby 2.4 ahora son unicode-sensibles.

nurettin
fuente
12

... y la mayúscula es:

"Awesome String".upcase
=> "AWESOME STRING"
mlambie
fuente
12

El activo joya carriles de soporte proporciona upcase, downcase, swapcase, capitalize, etc métodos con soporte de internacionalización:

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

Puede encontrar el método cuerdas como "strings".methods se puede definir cadena como upcase, downcase, titleize. Por ejemplo,

"hii".downcase
"hii".titleize
"hii".upcase
Foram Thakral
fuente
1

El método .swapcase transforma las letras mayúsculas en una cadena en minúsculas y las letras minúsculas en mayúsculas.

'TESTING'.swapcase #=> testing
'testing'.swapcase #=> TESTING
Rajkumar Ulaganadhan
fuente
1
¡Gracias! Esto es exactamente lo que estaba buscando. Una cadena de mayúsculas y minúsculas podría hacer más obvio exactamente lo que hace este método ...'Testing'.swapcase #=> tESTING
Mateo
0

No funcionará para todos, pero esto me ahorró mucho tiempo. Acabo de tener el problema con un CSV que devuelve "VERDADERO o" FALSO ", así que simplemente agregué VALOR.to_s.downcase ==" verdadero "que devolverá el valor booleano verdadero si el valor es" VERDADERO "y falso si el valor es" FALSO ", pero seguirá funcionando para el booleano verdadero y falso.

Mason SB
fuente