String methods

ในบทก่อนหน้า คุณได้เรียนรู้กับ String ในเบื้องต้นไปแล้ว อย่างไรก็ตาม ในภาษา Ruby นั้นมีเมธอดเกี่ยวกับ String เป็นจำนวนมากที่สามารถช่วยอำนวยความสะดวกให้กับเราในการเขียนโปรแกรมเพื่อจัดการ String ในบทนี้ เราจะพูดเกี่ยวกับการใช้งานเมธอดที่สำคัญและใช้บ่อยของคลาส String

เมธอดพื้นฐานของ String

ในการใช้งาน String สิ่งหนึ่งที่เราอยากจะทราบเกี่ยวกับ String คือต้องการทราบว่ามันมีความยาวเท่าไหร่ คุณสามารถใช้เมธอด length เพื่อหาความยาวของ String ได้

string_method1.rb
name = "Mateo"
occupation = "Ruby programmer"

puts name.length        # => 5
puts occupation.length  # => 15

เราใช้เมธอด length ในการหาความยาวของ String ความยาวของ String คือจำนวนตัวอักษรทั้งหมดใน String ในตัวอย่าง ตัวแปร name มีความยาว 5 ตัวอักษร และตัวแปร occupation มีความยาว 15 ตัวอักษร

ตัวอย่างต่อไป เราจะเขียนโปรแกรมเพื่อให้ผู้ใช้กำหนดรหัสผ่านของพวกเขา โดยมีเงื่อนไขอยู่ว่ารหัสผ่านต้องมีความยาวระหว่าง 4 ถึง 32 ตัวอักษร นี่เป็นโค้ดของโปรแกรม

string_method2.rb
puts "Set password for your account"
print "Enter password: "
password = gets.chomp

if password.length < 4
    puts "Your password is too short"
    puts "It should be at least 4 characters"
elsif password.length > 32
    puts "Your password is too long"
    puts "It should not more than 32 characters"
else
    puts "Congrats! Your password has been set"
end

ในตัวอย่าง เป็นโปรแกรมสำหรับกำหนดรหัสผ่านโดยการรหัสผ่านรับค่ามาจากคีย์บอร์ด ในการตั้งรหัสผ่านมีเงื่อนไขอยู่ว่ารหัสผ่านต้องมีความยาวอยู่ระหว่าง 4 - 32 ตัวอักษรเท่านั้น ถ้าหากไม่ใช่โปรแกรมจะแจ้งว่าให้เลือกลองใหม่อีกครั้ง

if password.length < 4
    puts "Your password is too short"
    puts "It should be at least 4 characters"

เราใช้คำสั่งตรวจสอบเงื่อนไข if เพื่อตรวจสอบว่าความยาวของรหัสผ่านนั้นน้อยกว่า 4 หรือไม่

Set password for your account
Enter password: ab
Your password is too short
It should be at least 4 characters

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราพิมพ์รหัสผ่านเป็น ab เนื่องจากความยาวของรหัสผ่านนั้นน้อยเกินไป ดังนั้นโปรแกรมบอกให้คุณลองกำหนดรหัสผ่านใหม่อีกครั้ง

Set password for your account
Enter password: thisispassword
Congrats! Your password has been set

หลังจากนั้นเรารันโปรแกรมอีกครั้งและพิมพ์รหัสผ่านเป็น thisispassword ในครั้งนี้รหัสผ่านของเรามีความยาวตามที่กำหนด และเราได้รับข้อความว่า ยินดีด้วย! ตั้งรหัสผ่านของคุณแล้ว คุณอาจจะลองตั้งรหัสผ่านที่มากกว่า 32 ตัวอักษร และเราเดาว่าคุณน่าจะรู้ว่าผลลัพธ์จะเป็นอย่างไร

เมธอด Slice และ Index

อย่างที่เราได้บอกไปแล้วในบทก่อนหน้า String นั้นเป็นข้อความที่ประกอบขึ้นด้วยลำดับของตัวอักษร ซึ่งในเบื้องหลังนั้น Ruby เก็บข้อมูลของ String เป็นอาเรย์ของตัวอักษร นั่นจึงทำให้เราสามารถเข้าถึงค่าของ String ผ่านทาง Index ของมันได้ วิธีการดังกล่าวนี้เรียกว่าการ Slice

ในภาษา Ruby อนุญาติให้คุณทำเช่นนี้ได้ผ่านทางเมธอด [] และ เมธอด slice นี่เป็นรูปแบบการใช้งาน

str[start, [count =1]]
str.slice(start, [count = 1])

จากรูปแบบการใช้งาน start เป็น Index ที่เราต้องการตัด String และ count เป็นการบอกว่าต้องการตัด String ไปเป็นจำนวนกี่ตัวจากตำแหน่งเริ่มต้น เราสามารถละเว้นอาร์กิวเมนต์ตัวที่สองได้ ค่าเริ่มต้นที่เป็น 1 จะถูกใช้แทนเมื่อเราละเว้นมัน ซึ่งหมายถึงการจัดหรือเข้าถึงตัวอักษรเพียงหนึ่งตัว

สำหรับการ slice String ในภาษา Ruby นั้นมีวิธีการทำอยู่สองแบบคือการใช้เมธอดเครื่องหมาย [] และผ่านเมธอด slice ทั้งสองวิธีให้ผลลัพธ์ที่เหมือนกัน คุณสามารถเลือกใช้วิธีไหนก็ได้ แต่ในบทเรียนของเรามักจะใช้วิธีแรกเป็นหลัก

string_method3.rb
str = "Mountains"

puts str[0]
puts str[1] + str[2]
puts str[-1]
puts str[-2]

ในตัวอย่าง เป็นการใช้งานเมธอด [] เพื่อเข้าถึงตัวอักษรผ่านทาง Index ของ String โดยที่ Index ของ String นั้นจะเหมือนกับอาเรย์คือเริ่มต้นจาก 0 ซึ่งหมายถึงตัวอักษรตัวแรกใน String ถึง n - 1 เมื่อ n เป็นความยาวของ String ซึ่งหมายถึงตัวอักษรตัวสุดท้ายใน String

puts str[-1]
puts str[-2]

คุณสามารถระบุ Index ที่เป็นลบได้ -1 หมายถึงตัวอักษรตัวสุดท้ายใน String และ -2 เป็นตัวอักษรรองสุดท้าย และถัดมาเรื่อยๆ ตามลำดับ

M
ou
s
n

นี่เป็นผลลัพธ์การทำงานของโปรแกรมจากการเข้าถึงตัวอักษรใน String ผ่านทางเมธอด [] หรือ slice

ตัวอย่างต่อมาเป็นการใช้เมธอด slice โดยการกำหนดอาร์กิวเมนต์ตัวที่สองซึ่งบอกจำนวนที่เรต้องการตัด ในการทำเช่นนี้เราสามารถตัดส่วนของ String ที่มากกว่าหนึ่งตัวอักษรได้

string_method4.rb
str = "Mountains"
puts str[0,1]
puts str[0,3]
puts str[4,5]

str2 = "Learn Ruby language"
puts str2[6,4]
puts str2[-8,8]

ในตัวอย่าง เป็นการตัดเอา String แบบกำหนดจำนวนที่ต้องการ และเช่นเดิมในอาร์กิวเมนต์แรกเป็นการกำหนด Index เริ่มต้นสำหรับการslice และในอาร์กิวเมนต์ที่สองกำหนดจำนวนตัวอักษรที่จะตัดเอาโดยเริ่มจาก Index เริ่มต้น

Mo
tains
Ruby
language

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

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

str = "Mountains"
puts str.slice(0, 1)
puts str.slice(0, 3)
puts str.slice(4, 5)

str2 = "Learn Ruby language"
puts str2.slice(6, 4)
puts str2.slice(-8, 8)

เมธอดแปลงตัวอักษรใน String

String มีกลุ่มของเมธอดที่ช่วยแปลงตัวอักษรแบบทั้งคำหรือประโยค ยกตัวอย่างเช่น แปลงข้อความจากตัวพิมพ์เล็กให้ตัวเป็นตัวพิมพ์ใหญ่ นี่เป็นตัวอย่างการใช้งานเมธอดดังกล่าว

string_method5.rb
puts "marcuscode".capitalize
puts "marcuscode".upcase
puts "HELLO".downcase
puts "marcuscode".reverse

ในตัวอย่าง เป็นการใช้งานของสี่เมธอดสำหรับแปลงตัวอักษรใน String เมธอด capitalize จะแปลงตัวอักษรตัวแรกใน String ให้เป็นตัวพิมพ์ใหญ่ ในขณะที่เมธอด upcase จะแปลงตัวอักษรทั้งหมดใน String ให้เป็นตัวพิมพ์ใหญ่

เมธอด downcase นั้นทำตรงกันข้ามกับเมธอด upcase คือแปลงตัวอักษรใน String ให้เป็นตัวพิมพ์เล็ก และสุดท้ายเมธอด reverse จะกลับด้านของ String

Marcuscode
MARCUSCODE
hello
edocsucram

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

เมธอดจัดเตรียมค่าของ String

เมื่อเราเขียนโปรแกรม เรามักจะต้องมีการติดต่อกับผู้ใช้งานโปรแกรมผ่านทางคีย์บอร์ด เช่น การรับค่าจากผู้ใช้งานจากคีย์บอร์ดอยู่เสมอ ในกรณีนี้เราอาจจะต้องตรวจสอบให้แน่ใจว่าค่าที่รับมานั้นถูกต้องและเป็นไปตามที่ต้องการ นั่นเป็นเหตุผลที่เราควรจัดเตรียมค่าที่รับเข้ามาก่อน ในภาษา Ruby มีเมธอดสำหรับการจัดเตรียม String ก่อนนำไปใช้งาน

มาดูตัวอย่างโปรแกรมอย่างง่ายที่รับชื่อของผู้ใช้ผ่านทางคีย์บอร์ดผ่านเมธอด gets ซึ่งเป็นวิธีที่เราคุ้นเคย

string_method6.rb
print "What's your name: "
name = gets

puts name.inspect
puts name.chomp.to_s.inspect

ในตัวอย่าง เป็นโปรแกรมรับค่าชื่อผ่านทางคีย์บอร์ดด้วยเมธอด gets แล้วนำมาเก็บไว้ในตัวแปร name และอย่างที่คุณรู้ เราจำเป็นต้องกดปุ่ม Enter เพื่อสิ้นสุดการรับค่า ค่าที่เรารับมาจากคีย์บอร์ดนั้นจะมีตัวอักษร \n ติดมาด้วยเสมอ นั้นเกิดขึ้นจากตอนที่เรากดปุ่ม Enter

puts name.inspect
puts name.chomp.to_s.inspect

ดังนั้นก่อนที่จะนำค่าที่รับมาไปใช้ในโปรแกรมได้อย่างถูกต้อง เราจำเป็นต้องลบค่า \n ออกไปจาก String ก่อนโดยการเรียกใช้เมธอด chomp ในตัวอย่างด้านบน เราแสดงเนื้อหาจริงๆ ของ String ผ่านทางเมธอด inspect จะเห็นว่าค่าในตัวแปร name ที่ยังไม่ได้เรียกใช้งานเมธอด chomp จะมีตัวอักษร \n ต่อท้ายข้อความ

What's your name: Mateo
"Mateo\n"
"Mateo"

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

และยังมีอีกเมธอดที่ใช้สำหรับจัดเตรียม String เมธอด strip ใช้สำหรับตัดช่องว่างที่อยู่รอบทั้งสองด้านของ String ออกไป

string_method7.rb
puts "  Thailand  ".strip.inspect
puts "  Japanese  ".lstrip.inspect
puts "  United State  ".rstrip.inspect

ในตัวอย่างเป็นการใช้งานสามเมธอด สำหรับตัดช่องว่างจากขอบของ String ออกไป เมธอด strip ใช้สำหรับตัดช่องว่างจากขอบของข้อความทั้งสองด้านออกไป เมธอด lstrip ใช้ตัดช่องว่างที่อยู่ทางด้านซ้ายของข้อความ และเมธอด rstrip ใช้ตัดช่องว่างที่อยู่ทางด้านขวาของข้อความ

"Thailand"
"Japanese  "
"  United State"

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราแสดงข้อความด้วยเมธอด inspect เพื่อดูค่าจริงๆ ของ String ว่ามันเป็นอย่างไร

เมธอดเหล่านี้อาจมีประโยชน์เมื่อคุณต้องเขียนโปรแกรมเพื่อรับค่าจากผู้ใช้ผ่านทางคีย์บอร์ดหรือหน้าฟอร์มกรอกข้อมูล ซึ่งผู้ใช้งานของเราอาจจะพิมพ์เว้นวรรคเพิ่มเข้ามาแบบไม่ได้ตั้งใจ เราสามารถใช้เมธอดเหล่านี้เพื่อตัดมันออกไปได้

เมธอดสำหรับแก้ไขเนื้อหาของ String

เมธอดที่ใช้งานบ่อยที่สุดสำหรับการเพิ่มเนื้อหาให้กับ String คือเมธอด concate และเมธอด prepend ซึ่งการทำงานของเมธอดเหล่านี้ทำหน้าที่ในการนำค่าของ String มาเชื่อมต่อกันเพื่อให้ได้ String ใหม่ และอย่างที่คุณทราบ ตัวดำเนินการต่อ String + นั้นเป็นการใช้งานรูปแบบสั้นของเมธอดทั้งสอง

string_method8.rb
puts "Hello ".concat("World")
puts "Hello".prepend("World ")

ในตัวอย่าง เป็นเป็นการนำข้อความมาต่อเข้าด้วยกันโดยเมธอดทั้งสอง แต่สิ่งที่แตกต่างกันคือ เมธอด concate จะนำข้อความไปต่อที่ด้านท้ายของ String ในขณะที่เมธอด prepend จะนำข้อความไปต่อที่ด้านหน้าของ String แทน

Hello World
Hello World

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

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

puts "Hello " +  "World"

ในขณะที่เราสามารถใช้เมธอด prepend และเมธอด concate เพื่อต่อข้อความเข้าไปยังตำแหน่งแรกและตำแหน่งสุดท้ายของ String เราสามารถใช้เมธอด insert เพื่อแทรก String เข้าไปยังตำแหน่งใดๆ ได้ มาดูตัวอย่าง

string_method9.rb
puts "marcuscodecom".insert(0, ".")
puts "marcuscodecom".insert(3, ".")
puts "marcuscodecom".insert(10, ".")
puts "marcuscodecom".insert(-4, ".")
puts "marcuscodecom".insert(-1, ".")

ในตัวอย่าง เราได้แทรกตัวอักษร "." เข้าไปยังที่ตำแหน่งต่างๆ ของ String ด้วยเมธอด insert โดยกำหนดตำแหน่งที่เราต้องการแทรกผ่าน Index ซึ่งตัวอักษรจะถูกแทรกเข้าไปในตำแหน่ง Index ดังกล่าว

.marcuscodecom
mar.cuscodecom
marcuscode.com
marcuscode.com
marcuscodecom.

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

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

string_method10.rb
puts "<b></b>".insert(3, "Ruby")
puts "This is tutorial".insert(8, "Ruby ")

ในตัวอย่าง บรรทัดแรกเราได้แทรกข้อความ "Ruby" ให้เข้าไปอยู่ในแท็กตัวหนาของ HTML และในบรรทัดต่อมาแทรกเข้าไปยังข้อความเพื่อสร้าง String ที่บอกว่า "นี่เป็นบทเรียนภาษา Ruby"

<b>Ruby</b>
This is Ruby tutorial

และนี่เป็นผลลัพธ์การทำงานของโปรแกรม

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

string_method11.rb
str = "Ruby is an OPP language. Matz created Ruby in 1990.\n"
str += "Ruby was written in the C language.";

puts str.sub("Ruby", "Python")

เมธอด sub ใช้เพื่อค้นหาและแทนที่คำใน String จากอีกคำหนึ่งไปยังคำหนึ่ง ในตัวอย่าง เป็นการใช้เมธอด sub เพื่อแทนที่จากคำว่า "Ruby" ที่พบใน String ด้วยคำว่า "Python"

Python is an OPP language. Matz created Python in 1990.
Python was written in the C language.

นี่เป็นผลลัพธ์ของโปรแกรม

เมธอดตรวจสอบค่าใน String

ต่อไปเราจะพูดถึงเมธอดสำหรับตรวจสอบค่าใน String ในภาษา Ruby มีเมธอดที่คุณสามารถใช้มันเพื่อตรวจสอบว่าใน String นั้นประกอบไปด้วยคำที่ต้องการหรือไม่ ซึ่งโดยทั่วไปแล้วเมธอดเหล่านี้จะให้ผลลัพธ์เป็นค่าของ Boolean

string_method12.rb
puts "marcuscode".start_with?("mar")
puts "marcuscode".start_with?("jar")
puts "Friday".end_with?("day")
puts "Jupiter".end_with?("day")
puts "Facebook".include?("oo")
puts "Twitter".include?("oo")

ในตัวอย่าง เราได้ใช้เมธอดสำหรับตรวจสอบคำใน String เมธอด start_with? ใช้เพื่อตรวจสอบว่า String ขึ้นต้นด้วยคำที่ต้องการหรือไม่ เมธอด end_with? ใช้เพื่อตรวจสอบว่า String นั้นลงท้ายด้วยคำที่ต้องการหรือไม่ และสุดท้ายเมธอด include? ใช้เพื่อตรวจสอบว่าค่าอาร์กิวเมนต์เป็นส่วนหนึ่งของ String หรือไม่

true
false
true
false
true
false

นี่เป็นผลลัพธ์การทำงานของโปรแกรม ที่จะแสดงออกมาเป็นค่าของ Boolean โดยทั่วไปแล้วเรามักจะใช้เมธอดเหล่านี้กับคำสั่งตรวจสอบเงื่อนไข if ต่อไปมาดูตัวอย่างโปรแกรมกรอกที่อยู่ของเว็บไซต์ และเราจะนำค่าที่รับเข้ามาตรวจสอบว่ามันเป็นไปตามที่ต้องการหรือไม่

string_method13.rb
print "Enter your website: "
url = gets.chomp

if url.start_with?("http")
    puts "Nice! your website looks cool"
else
    puts "Please enter a valid URL"
end

ในตัวอย่าง โปรแกรมถามให้ผู้ใช้กรอกเว็บไซต์ของพวกเขาผ่านทางคีย์บอร์ด โดยมีเงื่อนไขอยู่ว่าที่อยู่ของเว็บไซต์จะต้องขึ้นต้นด้วย "http" เท่านั้น

if url.start_with?("http")

ดังนั้นเราจึงใช้เมธอด start_with? เพื่อตรวจสอบว่าค่าในตัวแปร url นั้นขึ้นต้นด้วย "http" หรือไม่ ถ้าหากใช้โปรแกรมบอกว่าที่อยู่เว็บไซต์ของคุณนั้นถูกต้อง และถ้าหากไม่โปรแกรมบอกให้กรอกค่าที่ถูกต้องใหม่อีกครั้ง

Enter your website URL: http://marcuscode.com
Nice! your website looks cool

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เมื่อเรากรอกที่อยู่ของเว็บไซต์เป็น http://marcuscode.com ในตอนนี้ให้คุณลองกรอกที่อยู่ของเว็บไซต์ที่ไม่ถูกต้องและดูผลลัพธ์ว่าจะเป็นอย่างไร

ต่อมาเป็นตัวอย่างของเมธอดที่ใช้สำหรับเปรียบเทียบความเท่ากับของ String และตรวจสอบว่า String เป็นค่าว่างหรือไม่

string_method14.rb
puts "Ruby".eql?("Ruby")
puts "Ruby".eql?("PHP")
puts "Ruby" == "Ruby"
puts "Ruby" == "PHP"

puts "".empty?
puts "Mateo".empty?

ในตัวอย่าง เราได้ใช้เมธอด eql? เพื่อเปรียบเทียบว่าค่าของ String ทั้งสองนั้นเท่ากันหรือไม่ ค่าที่เท่ากันหมายความว่า String ต้องมีความยาวและตัวอักษรที่เหมือนกัน สำหรับการทำงานของเมธอด eql? จะให้ผลลัพธ์การทำงานเหมือนกับตัวดำเนินการเปรียบเทียบ == ที่คุณได้เรียนไปแล้วในบทของตัวดำเนินการ

เมธอด empty? ใช้เพื่อตรวจสอบว่าค่าใน String นั้นเป็นค่าว่างหรือไม่ เมธอดนี้ไม่มีอาร์กิวเมนต์ ผลลัพธ์ของเมธอดนั้นเหมือนกับการที่เรานำความยาวของ String ไปเปรียบเทียบกับ 0 ด้วยคำสั่ง str.length == 0

true
false
true
false
true
false

นี่เป็นผลลัพธ์การทำงานของโปรแกรมสำหรับการใช้งานเมธอด eql? และเมธอด empty? ในการเปรียบเทียบและตรวจว่าค่าใน String ว่างหรือไม่

ตรวจสอบค่าใน String ด้วยเมธอด match?

อีกเมธอดหนึ่งที่เราอยากจะแนะให้คุณรู้จักคือเมธอด match? มันใช้สำหรับตรวจสอบว่า String ตรงกับรูปแบบที่กำหนดหรือไม่ โดยรูปแบบนั้นจะถูกกำหนดด้วย Regular expression

Regular expression นั้นสามารถใช้เปรียบค่าใน String ตามตัวอักษรหรือรูปแบบที่ซ้อนได้ นี่เป็นตัวอย่าง

string_method15.rb
puts "mateo".match?(/mateo/)        # => true
puts "mateo34".match?(/mateo34/)    # => true

ในตัวอย่าง เราใช้เมธอด match? เพื่อตรวจสอบว่า String นั้นตรงกับรูปแบบที่เราต้องการหรือไม่ ซึ่งรูปแบบที่กำหนดในอาร์กิวเมนต์นั้นจะเป็น Regular expression และมันจะล้อมรอบด้วยเครื่องหมาย Slash (/) ในตัวอย่างนั้นเป็นการกำหนดรูปแบบเพื่อเปรียบเทียบตามตัวอักษร

นอกจานี้ เราสามารถใช้เมธอด match? เพื่อเปรียบเทียบด้วยรูปแบบของ Regular expression ที่ซับซ้อนได้ ในตัวอย่างต่อไปเราจะสร้างรูปแบบเพื่อตรวจสอบว่าชื่อผู้ใช้นั้นถูกต้องหรือไม่

string_method16.rb
pattern = /^[a-z][a-z0-9]{4,9}$/
puts "metin".match?(pattern)
puts "mateo34".match?(pattern)
puts "mateo&34".match?(pattern)
puts "12luke".match?(pattern)

ในตัวอย่าง เราได้กำหนดรูปแบบในการตรวจสอบชื่อผู้ใช้ในตัวแปร pattern โดยมีเงื่อนไขอยู่ว่าชื่อผู้ใช้สามารถมีได้เพียงตัวอักษรตัวพิมพ์เล็ก a - z และตัวเลข 0 - 9 เท่านั้น และต้องมีความยาวอยู่ระหว่าง 4 - 10 ตัวอักษร และนอกจากนี้ยังมีเงื่อนไขพิเศษอยู่ว่าต้องขึ้นต้นด้วยตัวอักษรเท่านั้น จะขึ้นด้วยตัวเลขไม่ได้

true
true
false
false

และนี่เป็นผลลัพธ์การทำงานของโปรแกรม เราจะมาอธิบายผลลัพธ์ในแต่ละบรรทัดกัน

pattern = /^[a-z][a-z0-9]{3,9}$/

ในตอนแรก เราได้กำหนดรูปแบบที่เอาไว้ใช้สำหรับตรวจสอบชื่อผู้ใช้และกำหนดไว้ในตัวแปร pattern และอย่างที่คุณเห็นว่ามันล้อมรอบด้วย / ซึ่งนี่เป็น Regular expression literal

^[a-z]

จากรูปแบบข้างต้น เราต้องการให้ชื่อผู้ใช้ขึ้นต้นด้วยตัวอักษร ดังนั้นเราเริ่มต้นด้วยเครื่องหมาย ^ เพื่อบ่งบอกว่าข้อความจะต้องขึ้นต้นด้วยสิ่งที่เรากำหนด ในที่นี้คือคลาสของตัวอักษร [a-z] นั่นหมายความว่าตอนนี้ชื่อผู้ใช้จะสามารถขึ้นต้นด้วยตัวอักษร a - z ได้เท่านั้น

[a-z0-9]{3,9}$

ต่อมาเป็นการกำหนดคลาสตัวอักษร [a-z0-9] ซึ่งหมายความว่าชื่อผู้ใช่สามารถมีได้เพียงตัวอักษรตัวพิมพ์เล็ก a - z และตัวเลข 0 - 9 เท่านั้น และรูปแบบ {4,9} เป็นการกำหนดความยาวว่ามันต้องมีความยาวอยู่ระหว่าง 3 ถึง 9 ตัวอักษร และรวมกับรูปแบบส่วนแรก ^[a-z] หนึ่งตัวอักษรเป็น 10 ตัวอักษร

ในบทนี้เราแค่แนะนำการใช้งาน Regular expression ร่วมกับเมธอดของ String เท่านั้น อย่างไรก็ตาม คุณจะได้เรียนรู้เกี่ยวกับ Regular expression อีกครั้งในบท Regular expression ในภาษา Ruby

เมธอดจัดรูปแบบ String

ต่อไปเราจะพูดถึงเมธอดที่ใช้สำหรับจัดรูปแบบของ String เช่นการเติมข้อความเข้าไปยัง String ให้ได้ตามความยาวที่กำหนด ซึ่งในภาษา Ruby นั้นมีอยู่สามเมธอดที่เราใช้เป็นส่วนมาก นี่เป็นตัวอย่าง

string_method17.rb
puts "Ruby".center(12)
puts "Ruby".center(12, "#")
puts "Python".ljust(12)
puts "Python".ljust(12, "#")
puts "Java".rjust(12)
puts "Java".rjust(12, "#")

เมธอดทั้งสามนั้นใช้สำหรับกำหนดความกว้างให้กับ Stringให้มีความยาวตามที่ต้องการ ในตัวอย่าง เราได้กำหนดความกว้างให้กับ String ทั้งหมดเป็น 12 แต่สิ่งที่แตกต่างกันคือเมธอด center จะจัดให้ข้อความอยู่ตรงกลาง เมธอด ljust จะจัดให้ข้อความอยู่ทางด้านซ้าย และเมธอด rjust จะจัดให้ข้อความอยู่ทางด้านขวา

ถ้าหากคุณใส่ค่าตัวอักษรในอาร์กิวเมนต์ที่สอง ตัวอักษรนี้จะถูกนำมาใช้ในการเติมข้อความให้เต็มตามจำนวนที่กำหนดแทนช่องว่าง

    Ruby
####Ruby####
Python
Python######
        Java
########Java

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

นอกจากนี้เมธอดเหล่านี้อาจมีประโยชน์ในกรณีที่คุณต้องการสร้าง ID ของตัวเลขที่มี 5 ตัวหลักเสมอ โดยการนำหน้าตัวเลขด้วย 0 เพื่อให้ครบตัวหลัก นี่เป็นตัวอย่าง

string_method18.rb
puts 1.to_s.rjust(5, "0")
puts 2.to_s.rjust(5, "0")
puts 3.to_s.rjust(5, "0")
puts 34.to_s.rjust(5, "0")
puts 150.to_s.rjust(5, "0")

ในตัวอย่าง คุณอาจจะสมมติว่าคุณต้องการสร้างรหัสของสินค้าจาก ID ของมัน โดยที่ในตอนแสดงผลมันจะต้องแสดงตัวเลขเป็น 5 หลักเสมอ เมื่อให้ง่ายต่อการดูหรือตรวจสอบ เราสามารทำเช่นนี้ได้ด้วยเมธอด rjust

00001
00002
00003
00034
00150

นี่เป็นผลลัพธ์การทำงานของโปรแกรม ในตอนนี้ รหัสสินค้าของเราจะแสดงเป็นตัวเลข 5 หลักเสมอ

เมธอดที่ใช้วนรอบ String

ในกรณีที่เราต้องการวนรอบตัวอักษรใน String เพื่อทำงานบางอย่างกับตัวอักษรเหล่านั้น Ruby มีเมธอดเหล่านี้ที่คุณอำนวยความสะดวกให้คุณ โดยไม่ต้องเขียนคำสั่ง for เพื่อวนอ่านค่าเอง นี่เป็นตัวอย่างการใช้งาน

string_method19.rb
str = "marcuscode"

str.each_char { |ch|
    print "#{ch} "
}
puts

str.each_byte { |b|
    print "#{b} "
}
puts

ในตัวอย่าง เป็นการใช้เมธอดเพื่อวนตัวอักษรใน String เมธอดเหล่านี้มีอาร์กิวเมนต์เป็นบล็อคที่จะถูกเรียกใช้ในการวนแต่ละรอบ และค่าที่วนจะถูกส่งเข้าไปผ่านตัวแปรที่เรากำหนดไว้ในบล็อค เมธอด each_char ใช้เพื่อวนตัวอักษรใน String เมธอด each_byte ใช้เพื่อวนตัวอักษรใน String แต่จะส่งค่า Byte ของตัวอักษรเข้าไปในบล็อคแทน

m a r c u s c o d e
109 97 114 99 117 115 99 111 100 101

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

ถ้าหากคุณต้องการวนตัวอักษรโดยเริ่มจากตัวสุดท้ายของ String คุณสามารถเรียกใช้เมธอด reverse ก่อนเมธอด each_char ได้

str = "marcuscode"

str.reverse.each_char { |ch|
    print "#{ch} "
}

การแปลงจาก String ไปยังข้อมูลอื่น

สำหรับเรื่องสุดท้ายในบทเรียนนี้ เราจะพูดเกี่ยวกับการแปลง String ไปยังข้อมูลประเภทอื่นๆ ในภาษา Ruby เช่น ตัวเลข หรือ Symbol

หลายครั้งที่เราทำงานกับ String ในภาษา Ruby เราอาจจะต้องการแปลงค่าเหล่านั้นไปยังข้อมูลประเภทอื่น ตัวอย่างที่เห็นได้บ่อยก็คือการรับค่าจากทางคีย์บอร์ดด้วยเมธอด gets เนื่องจากเมธอดดังกล่าวรับค่ามาเป็น String ดังนั้นในการนำมันไปใช้คำนวณทางตัวเลข เราจำเป็นต้องการแปลง String ดังกล่าวให้เป็นตัวเลขก่อน

string_method20.rb
puts "3.15".to_f
puts "123.456e1".to_f

puts "123".to_i
puts "-5.2".to_i
puts "10010011010".to_i(2)
puts "2232".to_i(8)
puts "1178".to_i(10)
puts "49a".to_i(16)

ในตัวอย่างแรก เมธอด to_f ใช้สำหรับแปลงค่าของ String ให้เป็นตัวเลขเทศนิยม ส่วนเมธอด to_i ใช้สำหรับแปลงค่าของ String ให้เป็นตัวเลขจำนวนเต็ม สำหรับเมธอด to_i คุณสามารถกำหนดอาร์กิวเมนต์เพื่อระบุว่าแปลงจากเลขฐานไหนได้ ในตัวอย่าง เราได้แปลง String ที่อยู่ในรูปแบบฐานสอง ฐานแปด ฐานสิบ และฐานสิบหก ซึ่งทั้งหมดนั้นมีค่าเท่ากับ 1178 ในฐานสิบ

3.15
1234.56
123
-5
1178
1178
1178
1178

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

string_method21.rb
puts "2".to_c
puts "3.5".to_c
puts "2/5".to_c

puts "2".to_r
puts "300/2".to_r
puts "-9.2".to_r

puts "th".to_sym
puts "de".to_sym

ตัวอย่างต่อมา เมธอด to_c ใช้แปลงค่าของ String ให้เป็นตัวเลขจำนวนเชิงซ้อน เมธอด to_r ใช้แปลงค่าของ String ให้เป็นตัวเลขแบบเศษส่วน และสุดท้ายเมธอด to_sym ใช้แปลงค่าของ String ให้เป็น Symbol

เมธอด to_sym นี้อาจจะมีประโยชน์ในกรณีที่คุณต้องการสร้าง Symbol ในขณะที่โปรแกรมทำงานอยู่ เช่น การสร้าง Index ของ Hash จากข้อความที่คำนวณได้ในโปรแกรม

2+0i
3.5+0i
2/5+0i
2/1
150/1
-46/5
th
de

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

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

อย่างไรก็ตาม ถ้าหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเมธอดทั้งหมดของ String สามารถดูได้ที่เอกสารของ Ruby เองที่ https://ruby-doc.org/core-2.7.0/String.html