Как преобразовать строку в нижний или верхний регистр в Ruby


Ответы:


1590

В Ruby есть несколько способов изменить регистр строк. Чтобы преобразовать в нижний регистр, используйте downcase:

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

Аналогично, upcaseзаглавные буквы каждой буквы и capitalizeзаглавные буквы первой буквы строки, но строчные буквы остальных:

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

Если вы хотите изменить строку на месте, вы можете добавить восклицательный знак в любой из этих методов:

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

Обратитесь к документации для String для получения дополнительной информации.


2
Я подумала об этом только после того, как ответила, но я все равно дам вам должное за то, что вы нашли время ответить на это. Спасибо!
Heat Miser

3
Осторожно! выглядит как использование взрыва "!" вернет ноль, если нет заглавной буквы. так что str = "this" возвращает str = nil
Phil_Ken_Sebben

12
Часто возвращаются "методы взрыва" nil; вы должны использовать их, если вы хотите изменить объект на месте, а не если вы хотите сохранить значение в другой переменной.
Софи Альперт

6
.titleizeэто от Rails. Не могу найти его в Stringдокументации по ruby
ronald8192

3
titleizeнеобходимо удалить из этого ответа или хотя бы указать, что это метод Rails.
Сагар Панди

122

Вы можете узнать все методы, доступные для String, открыв irb и выполнив:

"MyString".methods.sort

И для списка методов, доступных для строк, в частности:

"MyString".own_methods.sort

Я использую это, чтобы найти новые и интересные вещи об объектах, которые я, возможно, не знал бы, существовал.


12
Единственная проблема с этим ответом состоит в том, что #own_methods, кажется, не существует. Это из расширения Irb?
Марк Уилден

12
Привет - я думал, что тогда узнал что-то новое с #own_methods, но для меня это тоже не существует. Тем не менее, я обычно хожу: ( "MyString" .methods - Object.merhods) .sort
oceanician

2
Очень похоже на патч, на который ссылается @fakeleft, и он есть в моем файле .irbrc. Я исправляю объект "Патч" и создаю #own_methds с помощью этого: (obj.methods - obj.class.superclass.instance_methods) .sort
mlambie

1
@Laser Методы для String, в частности, являются теми, которые определены в самом классе String. Методы, доступные в String, включают методы, определенные в его суперклассе (ах).
Фонд Моники иск

1
Используйте, String.public_instance_methods(false)чтобы найти все общедоступные методы экземпляра, специально определенные String.
3limin4t0r

39

Как упомянуто @endeR, если интернационализация является проблемой, гем unicode_utils более чем достаточен.

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

Манипуляции со строками в Ruby 2.4 теперь чувствительны к юникоду.


18

Метод ruby downcaseвозвращает строку с заглавными буквами, замененными строчными.

"string".downcase

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


конвертирование в ruby ​​здесь: techotopia.com/index.php/Ruby_String_Conversions
TStamper

2
Хотя технически это помогает ответить на вопрос, оно действительно должно быть более осветительным. Показать результат возможно? Может быть, ссылка на документацию?
Жестянщик


12

Рельсы Active Support камень обеспечивает 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  ÁÂÃÀÇÉÊÍÓÔÕÚ"

1

Вы можете найти струнный метод , как "strings".methods вы можете определить строку как upcase, downcase, titleize. Например,

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

1

Метод .swapcase преобразует символы верхнего регистра в строку в нижний регистр и буквы нижнего регистра в верхний регистр.

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

1
Спасибо! Это именно то, что я искал. Строка в смешанном регистре может сделать более очевидным, что именно делает этот метод ...'Testing'.swapcase #=> tESTING
Мэтью


0

Не подойдет для всех, но это сэкономило мне кучу времени. У меня просто была проблема с CSV, возвращающим «TRUE» или «FALSE», поэтому я просто добавил VALUE.to_s.downcase == «true», который будет возвращать логическое true, если значение «TRUE», и false, если значение «FALSE». ", но все равно будет работать для логического значения true и false.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.