แบบฝึกหัด - ใช้วิธีการของตัวช่วย IndexOf() และ Substring() ของสตริง
- 25 นาที
ในแบบฝึกหัดนี้ คุณใช้ IndexOf() เมธอด เพื่อระบุตําแหน่งของสตริงอักขระอย่างน้อยหนึ่งตัวหรือมากกว่าภายในสตริงที่ใหญ่กว่า คุณใช้ Substring() เมธอด เพื่อส่งคืนส่วนของสตริงที่ใหญ่กว่าที่ตามหลังตําแหน่งอักขระที่คุณระบุ
นอกจากนี้ คุณยังจะใช้วิธีการ รุ่น Substring() โอเวอร์โหลด เพื่อตั้งค่าความยาวของอักขระที่จะส่งกลับหลังจากตําแหน่งที่ระบุในสตริง
เตรียมสภาพแวดล้อมการเข้ารหัสของคุณ
โมดูลนี้ประกอบด้วยกิจกรรมลงมือทําซึ่งจะแนะนําคุณตลอดกระบวนการสร้างและเรียกใช้รหัสการสาธิต คุณควรทํากิจกรรมเหล่านี้ให้เสร็จสมบูรณ์โดยใช้ Visual Studio Code เป็นสภาพแวดล้อมการพัฒนาของคุณ การใช้ Visual Studio Code สําหรับกิจกรรมเหล่านี้ช่วยให้คุณเขียนและเรียกใช้โค้ดในสภาพแวดล้อมของนักพัฒนาที่ใช้โดยผู้เชี่ยวชาญทั่วโลกได้อย่างสะดวก
หมายเหตุ
หากคุณทําโมดูล Microsoft Learn อื่นเสร็จสมบูรณ์แล้วใน C# series นี้ คุณอาจสร้างโฟลเดอร์โครงการสําหรับตัวอย่างรหัสอยู่แล้ว ถ้าเป็นกรณีนี้ คุณสามารถข้ามส่วนต่อไปนี้ของขั้นตอน และลบโค้ดในไฟล์ Project.cs ที่ใช้สําหรับแบบฝึกหัดก่อนหน้านี้
เปิด Visual Studio Code
คุณสามารถใช้เมนูเริ่มต้นของ Windows (หรือทรัพยากรที่เทียบเท่าสําหรับระบบปฏิบัติการอื่น) เพื่อเปิด Visual Studio Code
บนเมนู ไฟล์ รหัส Visual Studio เลือก เปิดโฟลเดอร์
ในกล่องโต้ตอบ เปิดโฟลเดอร์ ให้ไปยังโฟลเดอร์ Windows Desktop
หากคุณมีตําแหน่งโฟลเดอร์อื่นที่คุณเก็บโครงการโค้ดไว้ คุณสามารถใช้ตําแหน่งโฟลเดอร์นั้นแทนได้ สําหรับการฝึกนี้ สิ่งสําคัญคือการมีตําแหน่งที่ตั้งที่ง่ายต่อการค้นหาและจดจํา
ในกล่องโต้ตอบ เปิด โฟลเดอร์ ให้เลือก เลือกโฟลเดอร์
ถ้าคุณเห็นกล่องโต้ตอบความปลอดภัยที่ถามว่าคุณเชื่อถือผู้เขียนหรือไม่ ให้เลือก ใช่
บนเมนู เทอร์มินัล Visual Studio Code ให้เลือก เทอร์มินัลใหม่
โปรดสังเกตว่าพร้อมท์คําสั่งในแผงเทอร์มินัล จะแสดงเส้นทางโฟลเดอร์สําหรับโฟลเดอร์ปัจจุบัน เช่น:
C:\Users\someuser\Desktop>ที่พรอมท์คําสั่งเทอร์มินัล หากต้องการสร้างแอปพลิเคชันคอนโซลใหม่ในโฟลเดอร์ที่ระบุ ให้พิมพ์ dotnet new console -o ./CsharpProjects/TestProject แล้วกด Enter
คําสั่ง .NET CLI นี้ใช้เทมเพลตโปรแกรม .NET เพื่อสร้างโครงการแอปพลิเคชันคอนโซล C# ใหม่ในตําแหน่งที่ตั้งโฟลเดอร์ที่ระบุ คําสั่งจะสร้างโฟลเดอร์ CsharpProjects และ TestProject ให้คุณ และใช้ TestProject เป็นชื่อของไฟล์
.csprojในแผง EXPLORER ให้ขยายโฟลเดอร์ CsharpProjects
คุณควรเห็นโฟลเดอร์ TestProject และแฟ้มสองแฟ้ม แฟ้มโปรแกรม C# ที่ชื่อว่า Program.cs และแฟ้มโครงการ C# ที่ชื่อว่า TestProject.csproj
ในแผง EXPLORER หากต้องการดูไฟล์โค้ดของคุณในแผง ตัวแก้ไข ให้เลือก Program.cs
ลบบรรทัดรหัสที่มีอยู่
คุณกําลังใช้โครงการคอนโซล C# นี้เพื่อสร้าง สร้าง และเรียกใช้ตัวอย่างโค้ดในระหว่างโมดูลนี้
ปิดแผงเทอร์มินัล
เขียนโค้ดเพื่อค้นหาคู่วงเล็บที่ฝังอยู่ในสตริง
ตรวจสอบให้แน่ใจว่าคุณมี Visual Studio Code เปิดและ Program.cs แสดงในแผง ตัวแก้ไข
หมายเหตุ
Program.cs ควรว่างเปล่า ถ้าไม่ ให้เลือกและลบบรรทัดรหัสทั้งหมด
พิมพ์โค้ดต่อไปนี้ลงใน Visual Studio Code Editor:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); Console.WriteLine(openingPosition); Console.WriteLine(closingPosition);บนเมนู ไฟล์ Visual Studio Code ให้เลือก บันทึก
ต้องบันทึกไฟล์ Program.cs ก่อนที่จะสร้างหรือเรียกใช้โค้ด
ในแผง EXPLORER ในการเปิดเทอร์มินัลที่ตําแหน่งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProjectจากนั้นเลือก เปิดในเทอร์มินัลแบบรวม
แผงเทอร์มินัลควรเปิดขึ้น และควรมีพร้อมท์คําสั่งที่แสดงว่าเทอร์มินัลเปิดอยู่ไปยังตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ
ที่พร้อมท์คําสั่งเทอร์มินัล เมื่อต้องการเรียกใช้โค้ดของคุณ ให้พิมพ์ dotnet เรียกใช้ แล้วกด Enter
หมายเหตุ
ถ้าคุณเห็นข้อความ "ไม่พบโครงการที่จะเรียกใช้" ตรวจสอบให้แน่ใจว่าพร้อมท์คําสั่งเทอร์มินัลแสดงตําแหน่งที่ตั้งโฟลเดอร์ TestProject ที่คาดไว้ ตัวอย่าง:
C:\Users\someuser\Desktop\csharpprojects\TestProject>คุณควรเห็นผลลัพธ์ต่อไปนี้:
13 36ในกรณีนี้ ดัชนีของ
(อักขระคือ 13 โปรดจําไว้ว่าค่าเหล่านี้ยึดตามศูนย์ ดังนั้นจึงเป็นอักขระตัวที่ 14 ในสตริง ดัชนีของ)อักขระคือ36ตอนนี้คุณมีสองดัชนีแล้ว คุณสามารถใช้เป็นขอบเขตเพื่อดึงค่าระหว่างกันได้
เพิ่มโค้ดเพื่อดึงค่าระหว่างวงเล็บ
อัปเดตโค้ดของคุณใน Visual Studio Code Editor ดังนี้:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); // Console.WriteLine(openingPosition); // Console.WriteLine(closingPosition); int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));บันทึกไฟล์โค้ดของคุณ จากนั้นใช้ Visual Studio Code เพื่อเรียกใช้โค้ดของคุณ คุณควรเห็นผลลัพธ์ต่อไปนี้:
(inside the parenthesesเม
Substring()ธอด ต้องการตําแหน่งเริ่มต้นและจํานวนอักขระหรือความยาวที่ต้องการเรียกใช้ ดังนั้น คุณคํานวณความยาวในตัวแปรชั่วคราวที่เรียกว่าlengthและส่งผ่านด้วยopeningPositionค่าเพื่อดึงสตริงภายในวงเล็บผลลัพธ์จะปิด อย่างไรก็ตาม ผลลัพธ์มีวงเล็บเปิดด้วย ในแบบฝึกหัดนี้ การรวมวงเล็บไม่จําเป็น เมื่อต้องการเอาวงเล็บออกจากผลลัพธ์ คุณจะต้องอัปเดตโค้ดเพื่อข้ามดัชนีของวงเล็บเอง
ปรับเปลี่ยนตําแหน่งเริ่มต้นของสตริงย่อย
อัปเดตโค้ดของคุณใน Visual Studio Code Editor ดังนี้:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); openingPosition += 1; int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));บันทึกไฟล์โค้ดของคุณ จากนั้นใช้ Visual Studio Code เพื่อเรียกใช้โค้ดของคุณ คุณควรเห็นผลลัพธ์ต่อไปนี้:
inside the parenthesesใช้เวลาสักครู่เพื่อตรวจสอบโค้ดก่อนหน้าและบรรทัด
openingPosition += 1;โดยการเพิ่ม
openingPositionโดย1คุณสามารถข้ามอักขระวงเล็บเปิดเหตุผลที่คุณกําลังใช้ค่า
1เป็นเพราะนั่นคือความยาวของอักขระ ถ้าคุณพยายามที่จะค้นหาค่าที่เริ่มต้นหลังจากสตริงที่ยาวขึ้น ตัวอย่างเช่น<div>หรือ---คุณจะใช้ความยาวของสตริงนั้นแทนอัปเดตโค้ดของคุณใน Visual Studio Code Editor ดังนี้:
string message = "What is the value <span>between the tags</span>?"; int openingPosition = message.IndexOf("<span>"); int closingPosition = message.IndexOf("</span>"); openingPosition += 6; int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));ใช้เวลาสักครู่เพื่อตรวจสอบโค้ดก่อนหน้าและบรรทัด
openingPosition += 6;ส่วนย่อยของโค้ดก่อนหน้านี้แสดงวิธีการค้นหาค่าภายในแท็กเปิดและแท็กปิด
<span>ในกรณีนี้ คุณกําลังเพิ่ม
6เป็นopeningPositionออฟเซต เพื่อคํานวณความยาวของสตริงย่อย
หลีกเลี่ยงค่าเวทมนตร์
สตริงที่เข้ารหัสลับเช่น "<span>" ในรายการโค้ดก่อนหน้านี้เรียกว่า "สตริงเวทย์มนตร์" และค่าตัวเลขที่ฮาร์ดโค้ดอย่างที่เรียกว่า 6 "ตัวเลขมายากล" ค่า "เวทมนตร์" เหล่านี้เป็นที่ไม่พึงประสงค์ด้วยเหตุผลหลายประการและคุณควรพยายามหลีกเลี่ยงถ้าเป็นไปได้
ตรวจสอบโค้ดก่อนหน้าเพื่อพิจารณาว่าโค้ดอาจเสียหายอย่างไร ถ้าคุณกําหนดสตริง
"<span>"แบบตายตัวหลายครั้งในโค้ดของคุณ แต่สะกดผิดหนึ่งอินสแตนซ์ของโค้ดเป็น"<sapn>"คอมไพเลอร์ไม่ทัน
"<sapn>"เวลาการคอมไพล์เนื่องจากค่าอยู่ในสตริง การสะกดผิดนําไปสู่ปัญหาในขณะทํางาน และอาจยากต่อการติดตามผลทั้งนี้ขึ้นอยู่กับความซับซ้อนของโค้ดของคุณนอกจากนี้ ถ้าคุณเปลี่ยนสตริง
"<span>"ที่สั้นลง"<div>"แต่ลืมเปลี่ยนตัวเลข6เป็น5จากนั้นรหัสของคุณจะสร้างผลลัพธ์ที่ไม่พึงประสงค์อัปเดตโค้ดของคุณใน Visual Studio Code Editor ดังนี้:
string message = "What is the value <span>between the tags</span>?"; const string openSpan = "<span>"; const string closeSpan = "</span>"; int openingPosition = message.IndexOf(openSpan); int closingPosition = message.IndexOf(closeSpan); openingPosition += openSpan.Length; int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));ใช้เวลาสักครู่เพื่อตรวจสอบรหัสที่อัปเดตและการใช้คําสําคัญ
constตามที่ใช้ในconst string openSpan = "<span>";โค้ดใช้ค่าคงที่กับ
constคําสําคัญ ค่าคงที่ช่วยให้คุณสามารถกําหนดและเตรียมใช้งานตัวแปรที่ไม่สามารถเปลี่ยนแปลงค่าได้ จากนั้นคุณจะต้องใช้ค่าคงที่นั้นในส่วนที่เหลือของโค้ดเมื่อใดก็ตามที่คุณต้องการค่านั้น ซึ่งทําให้แน่ใจว่ามีการกําหนดค่าเพียงครั้งเดียวและสะกดผิดconstตัวแปรที่คอมไพเลอร์จับได้รายการโค้ดก่อนหน้านี้เป็นวิธีที่ปลอดภัยกว่าในการเขียนโค้ดเดียวกันกับที่คุณตรวจสอบในส่วนก่อนหน้า ตอนนี้ ถ้าค่าของ
openSpanการเปลี่ยนแปลงเป็น<div>บรรทัดของรหัสที่ใช้Lengthคุณสมบัติยังคงถูกต้อง
สรุป
หน่วยนี้ครอบคลุมวัสดุจํานวนมาก นี่คือสิ่งสําคัญที่สุดที่ต้องจําไว้:
-
IndexOf()ให้ตําแหน่งแรกของอักขระหรือสตริงที่อยู่ภายในสตริงอื่น -
IndexOf()ส่งกลับ-1หากไม่พบรายการที่ตรงกัน -
Substring()แสดงเฉพาะส่วนที่ระบุของสตริง โดยใช้ตําแหน่งเริ่มต้นและความยาวที่เป็นตัวเลือก - มักจะมีมากกว่าหนึ่งวิธีในการแก้ปัญหา คุณใช้สองเทคนิคที่แยกกันเพื่อค้นหาอินสแตนซ์ทั้งหมดของอักขระหรือสตริงที่กําหนด
- หลีกเลี่ยง ค่าเวทมนตร์ที่เข้ารหัสลับ ให้กําหนด
constตัวแปรแทน ไม่สามารถเปลี่ยนค่าของตัวแปรคงที่หลังจากการเตรียมใช้งาน
ตรวจสอบความรู้ของคุณ
คำติชม
หน้านี้มีประโยชน์หรือไม่
ไม่
ต้องการความช่วยเหลือในหัวข้อนี้หรือไม่
ต้องการลองใช้ Ask Learn เพื่อทําให้ชัดเจนหรือแนะนําคุณผ่านหัวข้อนี้หรือไม่