Cách chuyển đổi một chuỗi thành chữ thường hoặc chữ hoa trong Ruby


Câu trả lời:


1590

Ruby có một vài phương thức để thay đổi trường hợp chuỗi. Để chuyển đổi thành chữ thường, sử dụng downcase:

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

Tương tự, upcaseviết hoa mỗi chữ cái và capitalizeviết hoa chữ cái đầu tiên của chuỗi nhưng viết thường phần còn lại:

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

Nếu bạn muốn sửa đổi một chuỗi tại chỗ, bạn có thể thêm một dấu chấm than cho bất kỳ phương thức nào sau đây:

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

Tham khảo tài liệu về String để biết thêm thông tin.


2
Tôi chỉ nghĩ về nó sau khi tôi đã trả lời nó, nhưng tôi sẽ cho bạn sự tin tưởng vì đã dành thời gian để trả lời nó. Cảm ơn!
Heat Miser

3
Coi chừng! Trông tôi như dùng tiếng nổ "!" sẽ trả về nil nếu không có chữ in hoa. vì vậy str = "này". trả về str = nil
Phil_Ken_Sebben

12
Thông thường, "phương pháp bang" trở lại nil; bạn nên sử dụng chúng nếu bạn muốn thay đổi một đối tượng tại chỗ, chứ không phải nếu bạn muốn lưu trữ giá trị trong một biến khác.
Sophie Alpert

6
.titleizelà từ Rails. Không thể tìm thấy nó trong Stringtài liệu ruby
ronald8192

3
titleizecần phải được loại bỏ khỏi câu trả lời này hoặc ít nhất nói rằng đó là một phương pháp Rails.
Sagar Pandya

122

Bạn có thể tìm hiểu tất cả các phương thức có sẵn trên Chuỗi bằng cách mở irb và chạy:

"MyString".methods.sort

Và để biết danh sách các phương thức có sẵn cho các chuỗi nói riêng:

"MyString".own_methods.sort

Tôi sử dụng điều này để tìm hiểu những điều mới và thú vị về các đối tượng mà tôi có thể không biết có tồn tại.


12
Vấn đề duy nhất với câu trả lời này là #own_methods dường như không tồn tại. Có phải từ một phần mở rộng Irb?
Mark Wilden

12
Xin chào - Tôi nghĩ rằng tôi đã học được điều gì đó mới với #own_methods, nhưng nó cũng không tồn tại với tôi. Tuy nhiên, tôi thường đi: ("MyString" .methods - Object.merhods) .sort
hải dương học

2
Rất giống với bản vá @fakeleft được tham chiếu và tôi có nó trong tệp .irbrc của mình. Tôi khỉ vá Object và tạo #own_methds bằng cái này: (obj.methods - obj. Class.superclass.instance_methods) .sort
mlambie

1
@Laser Các phương thức cho String nói riêng là các phương thức được định nghĩa trong chính lớp String. Các phương thức có sẵn trên Chuỗi bao gồm các phương thức được xác định trong (các) siêu lớp của nó.
Vụ kiện của Quỹ Monica

1
Sử dụng String.public_instance_methods(false)để tìm tất cả các phương thức công khai được xác định cụ thể bởi String.
3limin4t0r

39

Giống như @endeR đã đề cập, nếu quốc tế hóa là một mối quan tâm, đá quý unicode_utils là quá đủ.

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

Các thao tác chuỗi trong Ruby 2.4 hiện nhạy cảm với unicode.


18

downcasePhương thức ruby trả về một chuỗi với các chữ cái viết hoa được thay thế bằng các chữ cái viết thường.

"string".downcase

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


chuyển đổi ruby ​​tại đây: techotopia.com/index.php/Ruby_String_Conversions
TStamper

2
Trong khi về mặt kỹ thuật, điều này giúp trả lời câu hỏi, nó thực sự cần được chiếu sáng nhiều hơn. Hiển thị kết quả có lẽ? Có lẽ một liên kết đến các tài liệu?
Tin Man

12

... và chữ hoa là:

"Awesome String".upcase
=> "AWESOME STRING"

12

Các Rails tích cực hỗ trợ đá quý cung cấp upcase, downcase, swapcase, capitalize, vv phương pháp với sự hỗ trợ quốc tế:

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

1

Bạn có thể tìm phương pháp chuỗi như "strings".methods bạn có thể xác định chuỗi như upcase, downcase, titleize. Ví dụ,

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

1

Các .swapcase biến đổi phương pháp latters hoa trong một chuỗi thành chữ thường và chữ thường sang chữ hoa.

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

1
Cảm ơn! Điều này thật đúng với gì mà tôi đã tìm kiếm. Một chuỗi trường hợp hỗn hợp có thể làm cho nó rõ ràng hơn chính xác những gì phương pháp này làm ...'Testing'.swapcase #=> tESTING
Matthew


0

Sẽ không làm việc cho mọi người, nhưng điều này chỉ giúp tôi tiết kiệm rất nhiều thời gian. Tôi vừa gặp sự cố với CSV trả về "TRUE hoặc" FALSE "vì vậy tôi vừa thêm VALUE.to_s.downcase ==" true "sẽ trả về giá trị boolean đúng nếu giá trị là" TRUE "và sai nếu giá trị là" FALSE ", Nhưng vẫn sẽ hoạt động cho boolean đúng và sai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.