Як перетворити рядок у нижній чи верхній регістр у Ruby


Відповіді:


1589

У Рубі є кілька методів зміни корпусу струн. Для перетворення в малі регістри використовуйте 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
Я думав про це лише після того, як я відповів на нього, але я дам вам довіру за те, що ви все одно знайдете час, щоб відповісти на нього. Дякую!
Тепло Мізер

3
Стережись! мені здається, що я користуюся чубком "!" поверне нуль, якщо немає великої літери. так str = "this" .запису! повертає str = nil
Phil_Ken_Sebben

12
Часто повертаються "методи баг" nil; ви повинні використовувати їх, якщо ви хочете змінити об'єкт на місці, а не, якщо ви хочете зберегти значення в іншій змінній.
Софі Альперт

6
.titleizeз Рейлів. Неможливо знайти його в рубіновій Stringдокументації
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

2
Дуже схожа на посилання на патч @fakeleft, і я маю це у своєму файлі .irbrc. Я мавпа патч Об'єкт і створюю #own_methds з цим: (obj.methods - obj.class.superclass.instan_methods)
.sort

1
@Laser Методами для 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

Метод рубіну downcaseповертає рядок з великими літерами, заміненими малими літерами.

"string".downcase

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



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 ", але все одно буде працювати для булевих істинних та хибних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.