Як перетворити рядок у нижній чи верхній регістр у 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.