Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีการสตริงทับทิม (คู่มือขั้นสูง)

สตริงคือลำดับของอักขระ

สตริงคือออบเจ็กต์ ดังนั้นสตริงจึงมีวิธีการมากมายที่คุณสามารถใช้ทำสิ่งต่างๆ กับสตริงได้

ในบทความนี้ คุณจะค้นพบ วิธีสตริงทับทิม . ที่มีประโยชน์ที่สุด พร้อมตัวอย่าง!

สารบัญ

  • 1 วิธีรับความยาวของสตริง
  • 2 วิธีตรวจสอบว่าสตริงว่างหรือไม่
  • 3 การแก้ไขสตริงคืออะไร
  • 4 วิธีการแยกสตริงย่อย
  • 5 วิธีค้นหาว่าสตริงมีสตริงอื่นหรือไม่
  • 6 วิธีใส่สายทับทิม
  • 7 เปรียบเทียบกรณีละเว้นสตริง
  • 8 วิธีตัดแต่งสตริงและลบช่องว่าง
  • คำนำหน้าและคำต่อท้ายสตริง 9 เส้น
  • 10 แปลงสตริงเป็นอาร์เรย์ของอักขระ
  • 11 แปลงอาร์เรย์เป็นสตริง
  • 12 แปลงสตริงให้เป็นจำนวนเต็ม
  • 13 ตรวจสอบว่าสตริงเป็นตัวเลขหรือไม่
  • 14 วิธีต่อท้ายตัวละคร
  • 15 วนซ้ำอักขระของสตริงใน Ruby
  • 16 วิธีแปลงสตริงเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กใน Ruby
  • 17 วิธีสร้างสตริงหลายบรรทัด
  • 18 วิธีแทนที่ข้อความภายในสตริงโดยใช้วิธี Gsub
  • 19 วิธีลบอักขระตัวสุดท้ายออกจากสตริง
  • 20 วิธีเปลี่ยนการเข้ารหัสสตริง
  • 21 นับตัวละคร
  • 22 สรุป
    • 22.1 ที่เกี่ยวข้อง

วิธีรับความยาวของสตริง

ง่าย:

"ruby".size
# 4

คุณยังสามารถใช้ length , แทนที่จะเป็น size , พวกเขาทำสิ่งเดียวกัน

วิธีตรวจสอบว่าสตริงว่างหรือไม่

เรากำหนดสตริงว่างเป็นสตริงที่มีความยาวเป็นศูนย์

ตรวจสอบได้ดังนี้ :

"".size == 0
# true

หรือดีกว่านั้น ใช้ empty? วิธีการ

ตัวอย่าง :

"".empty?
# true

สตริงว่างคือสตริงที่มีความยาวเป็นศูนย์ หรือประกอบด้วยอักขระช่องว่างเท่านั้น

การแก้ไขสตริงคืออะไร

การแก้ไขสตริงช่วยให้คุณรวมสตริงเข้าด้วยกัน:

name = "Jesus"

puts "Hello #{name}"

สิ่งที่บางคนไม่รู้คือคุณสามารถมีโค้ดจริงในการแก้ไขได้

นี่คือตัวอย่าง:

puts "The total is #{1+1}"

# "the total is 2"

Ruby เรียก to_s เมธอดบนบล็อกการแก้ไขสตริง ซึ่งจะบอกให้อ็อบเจ็กต์แปลงตัวเองเป็นสตริง

วิธีการแยกสตริงย่อย

สตริงย่อยเป็นส่วนที่เล็กกว่าของสตริง ซึ่งจะมีประโยชน์หากคุณต้องการเฉพาะส่วนที่เฉพาะเจาะจง เช่น จุดเริ่มต้น ตรงกลาง หรือจุดสิ้นสุด

คุณจะได้รับสตริงย่อยใน Ruby ได้อย่างไร

วิธีหนึ่งคือการใช้ดัชนีเริ่มต้นและจำนวนอักขระในวงเล็บเหลี่ยม โดยคั่นด้วยเครื่องหมายจุลภาค

ถูกใจสิ่งนี้ :

string = "abc123"

string[0,3]
# "abc"

string[3,3]
# "123"

ตัวเลขแรกคือดัชนีเริ่มต้น

ตัวเลขที่สองคือจำนวนอักขระที่คุณต้องการ

คุณยังสามารถใช้ช่วงได้หากต้องการทำบางอย่าง เช่น "รับอักขระทั้งหมดยกเว้นอักขระสุดท้าย"

ตัวอย่าง :

string = "abc123"

string[0..-2]
# "abc12"

ตอนนี้ ดัชนีแรกยังคงเป็นดัชนีเริ่มต้น แต่ดัชนีที่สองคือดัชนีสิ้นสุด (รวม) -2นี้ เป็นอักขระตัวที่สองถึงตัวสุดท้าย และ -1 คือจุดสิ้นสุดของสตริง

หากคุณต้องการลบหรือแทนที่สตริงย่อย .

คุณสามารถทำสิ่งนี้:

string[0..2] = ""

p string
# "123"

ดีมาก!

วิธีค้นหาว่าสตริงมีสตริงอื่นหรือไม่

วิธีใดง่ายที่สุดในการค้นหาว่าสตริงนั้นรวมอยู่ในสตริงอื่นหรือไม่

include? วิธีการ:

string = "Today is Saturday"

string.include?("Saturday")
# true

คุณยังสามารถใช้ index วิธีการ:

string = "Today is Sunday"

string.index("day")
# 2

วิธีนี้จะค้นหาคำบางส่วน &แทนที่จะคืนค่าจริงหรือเท็จ จะให้ดัชนีที่จุดเริ่มต้นของสตริงนี้

ในตัวอย่างนี้ index กำลังค้นหา "วัน" ใน "วันนี้"

หากคุณต้องการค้นหารูปแบบ (เช่นทุกคำที่มีคำว่า "วัน") คุณกำลังมองหานิพจน์ทั่วไป

วิธีการปาดสายทับทิม

วิธีหนึ่งในการใส่สตริงคือการใช้ rjust วิธีที่มีสองอาร์กิวเมนต์:

binary_string = "1101"
binary_string.rjust(8, "0")

# "00001101"

หากคุณต้องการแป้นชิดขวา คุณสามารถใช้ ljust :

binary_string = "1111"
binary_string.ljust(8, "0")

# "11110000"

เปรียบเทียบสตริงที่ไม่สนใจกรณี

เนื่องจากการเปรียบเทียบสตริงต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ คุณจึงต้องแน่ใจว่าสตริงทั้งสองที่คุณกำลังเปรียบเทียบอยู่ในกรณีเดียวกัน

วิธีทั่วๆ ไปคือทำให้สมการทั้งสองข้าง downcase หรือ upcase .

ตัวอย่าง :

lang1 = "ruby"
lang2 = "Ruby"

lang1.upcase == lang2.upcase

นอกจากนี้ยังมี casecmp? วิธีเปรียบเทียบแบบคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ไม่ค่อยได้ใช้

ยึดตามตัวอย่างข้างต้น

วิธีการตัดแต่งสตริงและลบช่องว่าง

เมื่ออ่านข้อมูลจากไฟล์หรือเว็บไซต์ คุณอาจพบว่ามีช่องว่างในสตริงเพิ่มขึ้น

คุณสามารถลบพื้นที่ส่วนเกินนั้นด้วย strip วิธีการ:

extra_space = "   test    "
extra_space.strip

# "test"

หากคุณต้องการลบช่องว่างสีขาวจากด้านใดด้านหนึ่ง (ซ้าย / ขวา) คุณสามารถใช้ lstrip &rstrip วิธีการแทน

คำนำหน้าสตริงและส่วนต่อท้าย

คุณสามารถใช้ start_with? วิธีการตรวจสอบว่าสตริงเริ่มต้นด้วยคำนำหน้าเฉพาะหรือไม่

นี่คือตัวอย่าง :

string = "ruby programming"

string.start_with? "ruby"
# true

นอกจากนี้ยังมี end_with? วิธีการ:

string = "ruby programming"

string.end_with? "programming"
# true

นอกจากนี้ Ruby 2.5 ยังแนะนำ delete_prefix &delete_suffix วิธีที่อาจเป็นประโยชน์กับคุณ

นี่คือตัวอย่าง :

string = "bacon is expensive"

string.delete_suffix(" is expensive")

# "bacon"

แปลงสตริงเป็นอาร์เรย์ของอักขระ

การแยกสตริงและแยกออกเป็นอาร์เรย์ของอักขระทำได้ง่ายด้วย split วิธีการ

ตัวอย่าง :

string = "a b c d"

string.split
# ["a", "b", "c", "d"]

โดยค่าเริ่มต้น split จะใช้ช่องว่างเป็นตัวคั่น แต่คุณสามารถส่งผ่านอาร์กิวเมนต์ในวิธีนี้เพื่อระบุตัวคั่นอื่นได้

วิธีแบ่งรายการค่าที่คั่นด้วยเครื่องหมายจุลภาค (CSV):

csv = "a,b,c,d"

string.split(",")
# ["a", "b", "c", "d"]

แต่ถ้าคุณทำงานกับข้อมูล CSV โดยเฉพาะ คุณอาจต้องการพิจารณาใช้คลาส CSV จากไลบรารีมาตรฐาน ชั้นเรียนนี้ทำสิ่งต่างๆ ได้ เช่น การอ่านส่วนหัวของคอลัมน์ คุณจึงทำสิ่งต่างๆ ได้ง่ายขึ้น

แปลงอาร์เรย์เป็นสตริง

หากคุณต้องการนำอาร์เรย์ของสตริงและรวมสตริงเหล่านี้เป็นสตริงขนาดใหญ่ คุณสามารถใช้ join วิธีการ

ตัวอย่าง :

arr = ['a', 'b', 'c']

arr.join
# "abc"

นอกจากนี้ยังสามารถส่งอาร์กิวเมนต์ไปยัง join อาร์กิวเมนต์นี้เป็นตัวคั่นอักขระ

ตัวอย่าง :

arr = ['a', 'b', 'c']

arr.join("-")
# "a-b-c"

แปลงสตริงเป็นจำนวนเต็ม

หากคุณต้องการแปลงสตริงเช่น "49" ลงในจำนวนเต็ม 49 คุณสามารถใช้ to_i วิธีการ

ตัวอย่าง :

"49".to_i

สังเกตว่าถ้าคุณลองสิ่งนี้ด้วยสตริงที่ไม่มีตัวเลข คุณจะได้รับ 0 .

ตัวอย่าง :

"a".to_i
# 0

ตรวจสอบว่าสตริงเป็นตัวเลขหรือไม่

คุณต้องการที่จะรู้ว่าสตริงประกอบด้วยตัวเลขเท่านั้นหรือไม่

คุณทำได้ :

"123".match?(/\A-?\d+\Z/)
# true

"123bb".match?(/\A-?\d+\Z/)
# false

หมายเหตุ :match? วิธีการถูกนำมาใช้ใน Ruby 2.4 คุณสามารถใช้ match (ไม่มีเครื่องหมายคำถาม) ในเวอร์ชันเก่า

รหัสนี้ใช้นิพจน์ทั่วไป ให้ฉันแปลให้คุณ:

“ตั้งแต่เริ่มต้นสตริง (\A ) ตรวจสอบว่ามีเส้นประเสริมหรือไม่ (-? สำหรับจำนวนลบ) ตรวจสอบให้แน่ใจว่ามีตัวเลขอยู่ในนั้น (\d+ ) &ไม่มีอะไรอื่นจนกว่าจะสิ้นสุดสตริง (\Z )”

วิธีการต่อท้ายตัวละคร

คุณสามารถสร้างสตริงขนาดใหญ่จากสตริงที่เล็กกว่าได้โดยการผนวกอักขระเข้ากับสตริงที่มีอยู่ เรายังเรียกสิ่งนี้ว่า การต่อสตริง .

นี่คือวิธีการทำโดยใช้ << วิธีการ:

string = ""

string << "hello"
string << " "
string << "there"

# "hello there"

อย่าใช้ += สำหรับการต่อสตริงเพราะจะสร้างสตริงใหม่ทุกครั้งซึ่งไม่เป็นผลดีต่อประสิทธิภาพ!

วนซ้ำอักขระของสตริงใน Ruby

บางครั้งการทำงานกับอักขระแต่ละตัวของสตริงก็มีประโยชน์

วิธีหนึ่งในการทำเช่นนั้นคือการใช้ each_char วิธีการ:

"rubyguides".each_char { |ch| puts ch }

คุณยังสามารถใช้ chars วิธีการแปลงสตริงเป็นอาร์เรย์ของอักขระ จากนั้นคุณสามารถใช้ each ในอาร์เรย์นี้เพื่อวนซ้ำ

ตัวอย่าง :

array_of_characters = "rubyguides".chars
# ["r", "u", "b", "y", "g", "u", "i", "d", "e", "s"]

วิธีการแปลงสตริงเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กใน Ruby

หากคุณต้องการแปลงสตริงเป็นตัวพิมพ์ใหญ่ทั้งหมด คุณสามารถใช้ upcase วิธีการ

ตัวอย่าง :

"abcd".upcase
# "ABCD"

และถ้าคุณต้องการแปลงเป็นตัวพิมพ์เล็ก คุณสามารถใช้ downcase วิธีการ

ตัวอย่าง :

"ABCD".downcase
# "abcd"

วิธีการสร้างสตริงหลายบรรทัด

คุณสร้างสตริงหลายบรรทัดได้ 2 วิธี

หนึ่งคือการใช้ heredocs:

b = <<-STRING
aaa
bbb
ccc
STRING

และอีกอย่างคือการใช้ %Q :

a = %Q(aaa
bbb
ccc
)

วิธีการแทนที่ข้อความภายในสตริงโดยใช้วิธี Gsub

หากคุณต้องการแทนที่ข้อความภายในสตริง ให้ใช้วิธี gsub

มาแทนที่คำว่า "dogs" ด้วย "cats":

string = "We have many dogs"

string.gsub("dogs", "cats")

# "We have many cats"

หากคุณต้องการลบสตริง ให้ใช้สตริงว่าง เป็นอาร์กิวเมนต์ที่ 2

ตัวอย่าง :

string = "abccc"

string.gsub("c", "")

# "ab"

ตอนนี้ :

gsub method คืนค่าสตริงใหม่

หากคุณต้องการใช้การเปลี่ยนแปลงกับสตริงดั้งเดิม คุณสามารถใช้ gsub! วิธีการ

เมธอด gsub ยังใช้นิพจน์ทั่วไปเป็นอาร์กิวเมนต์เพื่อให้คุณสามารถแทนที่รูปแบบแทนคำที่แน่นอนได้

นี่คือตัวอย่าง :

string = "We have 3 cats"

string.gsub(/\d+/, "5")

# "We have 5 cats"

แทนที่ตัวเลขทั้งหมด (\d+ ) ในสตริงที่มีตัวเลข 5 .

อีกวิธีหนึ่งในการใช้วิธีนี้ด้วยการบล็อก:

title = "the lord of the rings"

title.gsub(/\w+/) { |word| word.capitalize }
# "The Lord Of The Rings"

แล้ว gsub . ล่ะ vs sub ?

เอาล่ะ sub เหมือนกับ gsub แต่จะแทนที่เฉพาะนัดแรกเท่านั้น

Gsub แทนที่การแข่งขันทั้งหมด

วิธีการลบอักขระตัวสุดท้ายออกจากสตริง

หากคุณกำลังขอให้ผู้ใช้ป้อนข้อมูล (โดยใช้วิธี Kernel#gets) คุณจะมีอักขระขึ้นบรรทัดใหม่ (\n ) ที่ส่วนท้ายของสตริง ซึ่งจะป้องกันไม่ให้คุณเปรียบเทียบสตริงโดยตรง

ตัวอย่าง :

puts "What's your name?"
name = gets

# type something...

วิธีที่ดีที่สุดในการลบอักขระขึ้นบรรทัดใหม่นั้น (\n ) คือ ใช้วิธี chomp .

ตัวอย่าง :

name = gets.chomp

เนื่องจาก Ruby 2.3 วิธี chomp ใช้อาร์กิวเมนต์ที่เป็นตัวเลือกที่ให้คุณลบอักขระที่คุณต้องการลบได้

ตัวอย่าง :

"abcd?".chomp("?")
# "abcd"

และถ้าไม่มีอักขระนั้นก็จะส่งคืนสตริงเดิม

วิธีการเปลี่ยนการเข้ารหัสสตริง

สตริงจะถูกจัดเก็บเป็นลำดับของไบต์ โดยจะเปลี่ยนเป็นอักขระที่คุณเห็นตามการเข้ารหัส

ตัวอย่างเช่น ตัวเลข 65 ในการเข้ารหัส ASCII แสดงถึงตัวอักษร "A"

แต่ยังมีการเข้ารหัสที่ซับซ้อนมากขึ้น เช่น UTF-8 ซึ่งช่วยให้คุณแสดงอักขระจากภาษาต่างๆ (จีน ฯลฯ) และแม้แต่อีโมจิได้

หากต้องการค้นหาการเข้ารหัสปัจจุบันสำหรับสตริง คุณสามารถใช้ encoding วิธีการ

"abc".encoding

# Encoding:UTF-8

เมื่ออ่านไฟล์จากดิสก์หรือดาวน์โหลดข้อมูลบางส่วนจากเว็บไซต์ คุณอาจประสบปัญหาในการเข้ารหัส

คุณมักจะแก้ไขปัญหานั้นได้ด้วยการบังคับใช้ encoding .

ถูกใจสิ่งนี้ :

"abc".force_encoding("UTF-8")

นับตัวละคร

คุณสามารถนับจำนวนครั้งที่อักขระปรากฏในสตริงโดยใช้ count วิธีการ

ตัวอย่าง:

str = "aaab"

str.count("a")
# 3

str.count("b")
# 1

สรุป

คุณได้เรียนรู้เกี่ยวกับวิธีสตริง เช่นเดียวกับการรวมและแยกเพื่อแยกสตริงออกเป็นอาร์เรย์ gsub เพื่อแทนที่ข้อความภายในสตริง &แถบเพื่อตัดพื้นที่สีขาวส่วนเกินออก

เนื่องจากคุณอาจต้องการอ้างอิงหน้านี้ในภายหลัง อย่าลืมบุ๊กมาร์กและแชร์กับเพื่อน Ruby ของคุณทุกคน 🙂

ขอบคุณสำหรับการอ่าน!