วิธีการแปลงสตริงเป็นตัวพิมพ์เล็กหรือตัวใหญ่ใน 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
ระวัง! ดูเหมือนว่าฉันจะใช้ปัง "!" จะคืนค่าศูนย์ถ้าไม่มีอักษรตัวใหญ่ so str = "this" .casecase! ส่งคืน str = nil
Phil_Ken_Sebben

12
บ่อยครั้งที่ "วิธีการปัง" กลับมาnil; คุณควรใช้มันหากคุณต้องการเปลี่ยนวัตถุให้เข้าที่ไม่ใช่ถ้าคุณต้องการเก็บค่าไว้ในตัวแปรอื่น
Sophie Alpert

6
.titleizeมาจาก Rails ไม่สามารถหาได้ในStringเอกสารทับทิม
ronald8192

3
titleizeจำเป็นต้องลบออกจากคำตอบนี้หรืออย่างน้อยก็ระบุว่าเป็นวิธี Rails
Sagar Pandya

122

คุณสามารถหาวิธีทั้งหมดที่มีอยู่ใน String โดยการเปิด IRB และทำงาน:

"MyString".methods.sort

และสำหรับรายการเมธอดที่มีสำหรับสตริงโดยเฉพาะ:

"MyString".own_methods.sort

ฉันใช้สิ่งนี้เพื่อค้นหาสิ่งใหม่และน่าสนใจเกี่ยวกับวัตถุที่ฉันอาจไม่เคยรู้จักมาก่อน


12
ปัญหาเดียวของคำตอบนี้คือ #own_methods ไม่มีอยู่จริง มันมาจากการขยาย Irb?
Mark Wilden

12
สวัสดี - ฉันคิดว่าฉันกำลังเรียนรู้สิ่งใหม่ ๆ ด้วย #own_methods แต่มันก็ไม่มีให้ฉันเช่นกัน อย่างไรก็ตามฉันมักจะไป: ("MyString" .methods - Object.merhods) .sort
oceanician

2
คล้ายกับ patch @fakeleft ที่อ้างอิงและฉันมีอยู่ในไฟล์. irbrc ของฉัน ฉันวัตถุลิงแพทช์และสร้าง #own_methds ด้วยนี้ (obj.methods - obj.class.superclass.instance_methods) .sort
mlambie

1
@ เลเซอร์วิธีการโดยเฉพาะอย่างยิ่งสตริงเป็นคนที่กำหนดไว้ในชั้นเรียนของตัวเองสตริง วิธีการที่มีอยู่ใน String รวมถึงวิธีที่กำหนดไว้ใน superclass (es)
คดีกองทุนของโมนิกา

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 ตอนนี้มีความอ่อนไหวต่อ Unicode


18

downcaseเมธอดruby ส่งคืนสตริงด้วยตัวอักษรตัวพิมพ์ใหญ่แทนที่ด้วยตัวพิมพ์เล็ก

"string".downcase

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


การแปลงทับทิมที่นี่: techotopia.com/index.php/Ruby_String_Conversions
TStamper

2
ในขณะที่ในทางเทคนิคแล้วสิ่งนี้จะช่วยตอบคำถามได้ แต่ควรให้ความสว่างมากกว่า แสดงผลลัพธ์บางที อาจลิงค์ไปยังเอกสารประกอบ?
Tin Man


12

รางสนับสนุนอัญมณีที่ใช้งานให้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แปลง latters ตัวพิมพ์ใหญ่ในสายอักขระเป็นตัวพิมพ์เล็กและตัวอักษรตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่

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

1
ขอบคุณ! นี่คือสิ่งที่ฉันกำลังมองหา สตริงตัวพิมพ์เล็กอาจทำให้ชัดเจนมากขึ้นว่าวิธีการนี้ทำอะไรได้บ้าง ...'Testing'.swapcase #=> tESTING
:


0

จะไม่ได้ผลสำหรับทุกคน แต่นี่ช่วยฉันได้หลายครั้ง ฉันเพิ่งพบปัญหากับ CSV ที่คืนค่า "TRUE หรือ" FALSE "ดังนั้นฉันเพิ่งเพิ่ม VALUE.to_s.downcase ==" true "ซึ่งจะคืนค่าบูลีนจริงถ้าค่าเป็น" TRUE "และเท็จถ้าค่าเป็น" FALSE " "แต่จะยังคงใช้ได้กับบูลีนจริงและเท็จ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.