Как преобразовать строку в нижний или верхний регистр в 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.