วิธีการสตริงย่อย VB.NET พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
VB.Net Substring extracเมธอดนี้ใช้สำหรับตัดส่วนหนึ่งของสตริงโดยระบุตำแหน่งเริ่มต้นและความยาว (ถ้ามี) เมธอดนี้เป็นของคลาส String นับจำนวนอักขระจากศูนย์ และส่งคืนสตริงใหม่โดยไม่เปลี่ยนแปลงสตริงเดิม
สตริงย่อยคืออะไร?
ฟังก์ชัน Substring ใช้สำหรับดึงส่วนหนึ่งของสตริงที่ระบุ เมธอดนี้ถูกกำหนดไว้ในคลาส String Microsoft VB.Netคุณต้องระบุหมายเลขดัชนีเริ่มต้นที่จะใช้ในการแสดงสตริงtracted. สตริงจะถูก extracted จากดัชนีนั้นไปจนถึงความยาวที่คุณระบุ
ก่อนหน้านี้tracการเข้าใจไวยากรณ์ที่เมธอด Substring คาดหวังจะช่วยได้มาก
ไวยากรณ์ของสตริงย่อย
ฟังก์ชันนี้ยอมรับอาร์กิวเมนต์สองตัวตามที่แสดงในไวยากรณ์ต่อไปนี้:
Public Function Substring(ByVal start_Index As Integer, ByVal sub_length As Integer) As String
ที่นี่
- คีย์เวิร์ด ByVal หมายถึง pass-by-value ซึ่งเป็นกลไกในการส่งผ่านอาร์กิวเมนต์ไปยังฟังก์ชัน
- start_Index คือดัชนีที่จะใช้ในการดึงสตริงย่อย
- sub_length ระบุความยาวที่จะคัดลอกสตริงจาก start_Index โดยความยาวนี้จะวัดเป็นจำนวนอักขระ ฟังก์ชันจะส่งคืนค่า extracted substring.
ดัชนีเริ่มต้นนับจากศูนย์ ดังนั้นอักขระตัวแรกของสตริงจึงอยู่ที่ตำแหน่ง 0 แทนที่จะเป็นตำแหน่ง 1
เมื่อกำหนดไวยากรณ์แล้ว ตัวอย่างต่อไปนี้จะแสดงวิธีใช้งานเมธอด Substring ภายในแอปพลิเคชันคอนโซล
ตัวอย่าง
ขั้นตอนที่ 1) สร้างแอปพลิเคชันคอนโซลใหม่
ขั้นตอนที่ 2) เพิ่มโค้ดต่อไปนี้ลงไป:
Module Module1 Sub Main() Dim st As String = "Guru99" Dim subst As String = st.Substring(0, 4) Console.WriteLine("The substring is: {0}", subst) Console.ReadKey() End Sub End Module
ขั้นตอนที่ 3) คลิกปุ่ม Start จากแถบเครื่องมือเพื่อเรียกใช้โค้ด คุณควรจะได้ผลลัพธ์ดังต่อไปนี้:
เราได้ใช้โค้ดดังต่อไปนี้:
คำอธิบายของ Code:
- การสร้างโมดูลชื่อ Module1
- เริ่มขั้นตอนย่อยหลัก
- กำหนดตัวแปรสตริงชื่อ st และกำหนดค่าให้กับมัน Guru99 ต่อ 1
- กำหนดตัวแปรสตริงชื่อ 'subst' ให้เป็นสตริงย่อยของสตริง 'st' โดยเริ่มจากดัชนี 0 และมีความยาว 4 ตัวอักษร
- พิมพ์ข้อความและสตริงย่อยด้านบนบนคอนโซล
- การหยุดหน้าต่างคอนโซลชั่วคราวชั่วขณะหนึ่งเพื่อรอให้ผู้ใช้ดำเนินการเพื่อปิดหน้าต่างดังกล่าว
- สิ้นสุดขั้นตอนย่อยหลัก
- จุดสิ้นสุดของโมดูล
อาร์กิวเมนต์หนึ่ง
จะเกิดอะไรขึ้นถ้าเราส่งผ่านอาร์กิวเมนต์เดียวไปยังฟังก์ชัน? ฟังก์ชันจะคัดลอกข้อมูลทั้งหมดในสตริงที่เริ่มต้นจากดัชนีนั้น สิ่งที่เกิดขึ้นคือฟังก์ชัน Substring จะคัดลอกข้อมูลสตริงทั้งหมดที่ดัชนีนั้นรวมทั้งข้อมูลที่ตามหลังดัชนีนั้นภายใน ตัวอย่างเช่น:
Module Module1 Sub Main() Dim st As String = "Guru99" Dim subst As String = st.Substring(4) Console.WriteLine("The substring is: {0}", subst) Console.ReadKey() End Sub End Module
คลิกปุ่มเริ่มเพื่อรันโค้ด ผลลัพธ์ควรเป็นดังนี้:
ฟังก์ชัน Substring ส่งคืนค่า 99 เราส่งค่าพารามิเตอร์ 4 ให้กับฟังก์ชัน ซึ่งหมายความว่าฟังก์ชันจะเริ่มต้นการทำงานtract คือสตริงย่อยตั้งแต่ตัวอักษรที่ดัชนี 4 จนถึงท้ายสตริง 9 คือตัวอักษรที่ดัชนี 4 ของสตริง Guru99 ดังนั้นอดีตtracเรื่องราวเริ่มต้นจากตรงนั้น
นอกจากจะตัดจากดัชนีเดียวแล้ว เมธอด Substring ยังสามารถกำหนดเป้าหมายไปยังอักขระที่อยู่ตรงกลางของสตริงได้อีกด้วย
ตัวละครกลาง
นอกจากนี้ เรายังสามารถรับอักขระตรงกลางของสตริงที่ต้องการได้อีกด้วย ในกรณีนี้ เราเพียงแค่ต้องระบุดัชนีเริ่มต้นและความยาวของสตริงที่ต้องการเท่านั้น ในตัวอย่างต่อไปนี้ เราจะรับสตริงย่อยของสตริงที่ระบุจากดัชนี 2 และสตริงจะมีความยาว 2 อักขระ:
Module Module1 Sub Main() Dim st As String = "Guru99" Dim subst As String = st.Substring(2, 2) Console.WriteLine("The substring is: {0}", subst) Console.ReadKey() End Sub End Module
คลิกปุ่ม Start จากแถบเครื่องมือเพื่อรันโค้ด คุณจะได้รับผลลัพธ์ดังต่อไปนี้:
ในตัวอย่างข้างต้น ฟังก์ชัน Substring ส่งคืนค่า ru เราส่งพารามิเตอร์ (2, 2) ไปยังฟังก์ชัน เลข 2 ตัวแรกสั่งให้ฟังก์ชันเริ่มต้นการวนซ้ำtracการเลือกสตริงย่อยจากดัชนี 2 ในขณะที่เลข 2 ตัวที่สองสั่งให้ฟังก์ชันส่งคืนสตริงย่อยที่มีความยาวเพียง 2 ตัวอักษรเท่านั้น ซึ่งหมายความว่า extracการแยกส่วนย่อยของสตริงควรเริ่มต้นจากองค์ประกอบที่ตำแหน่งดัชนี 2 ของสตริง Guru99 ซึ่งก็คือ r เนื่องจากสตริงย่อยที่ส่งคืนควรมีความยาวเพียง 2 ตัวอักษรเท่านั้น ตัวอย่างtraction จะไม่ผ่านตัว 'u' ดังนั้นจึงคืนค่าเป็น 'ru'
หนึ่งชาร์
เราสามารถใช้ฟังก์ชัน Substring เพื่อรับอักขระตัวเดียวจากสตริงได้ ในกรณีดังกล่าว คุณจำเป็นต้องทำการจัดสรร แต่สามารถเข้าถึงอักขระได้โดยตรง วิธีนี้เร็วกว่าเล็กน้อย ตัวอย่างต่อไปนี้จะสาธิตสองวิธีที่เราจะทำได้:
Module Module1 Sub Main() Dim st As String = "Guru99" Dim mid1 As Char = st(1) Console.WriteLine(mid1) Dim mid2 As String = st.Substring(1, 1) Console.WriteLine(mid2) Console.ReadKey() End Sub End Module
คลิกปุ่ม Start เพื่อรันโค้ด คุณจะได้รับผลลัพธ์ดังต่อไปนี้:
เราได้ใช้โค้ดดังต่อไปนี้:
คำอธิบายของ Code:
- การสร้างโมดูลชื่อ Module1
- เริ่มขั้นตอนย่อยหลัก
- กำหนดตัวแปรสตริงชื่อ st และกำหนดค่าให้กับมัน Guru99 ต่อ 1
- การกำหนดตัวแปรสตริงชื่อ mid1 และรับอักขระที่ดัชนี 1 ของ String st อักขระนี้จะถูกกำหนดให้กับตัวแปร mid1
- การพิมพ์อักขระด้านบนบนคอนโซล
- การกำหนดตัวแปรสตริงชื่อ mid2 และรับอักขระที่ดัชนี 1 ที่มีความยาว 1 จาก String st ความยาว 1 หมายความว่าจะส่งกลับอักขระเดิมที่ดัชนีเริ่มต้น การนับเริ่มต้นจากดัชนีเริ่มต้นที่คุณระบุ อักขระนี้จะถูกกำหนดให้กับตัวแปร mid2
- การพิมพ์อักขระด้านบนบนคอนโซล
- การหยุดหน้าต่างคอนโซลชั่วคราวชั่วขณะหนึ่งเพื่อรอให้ผู้ใช้ดำเนินการเพื่อปิดหน้าต่างดังกล่าว
- สิ้นสุดขั้นตอนย่อยหลัก
- จุดสิ้นสุดของโมดูล
เมื่อคุณรู้สึกสบายใจแล้วtracในการแยกสตริงย่อย การเรียนรู้วิธีจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นจากเมธอดนี้จึงเป็นสิ่งสำคัญ
ข้อผิดพลาดเกี่ยวกับสตริงย่อยที่พบบ่อยและวิธีหลีกเลี่ยง
เมธอด Substring มีข้อจำกัดที่เข้มงวดเกี่ยวกับค่าที่คุณส่งเข้าไป หากค่าที่ส่งเข้าไปอยู่นอกขอบเขตของสตริง VB.Net จะโยนข้อยกเว้น ArgumentOutOfRangeException และหยุดโปรแกรมขณะทำงาน การเข้าใจกฎเหล่านี้จะช่วยให้คุณหลีกเลี่ยงข้อผิดพลาดทั่วไปนี้ได้
วิธีการนี้จะทำให้เกิดข้อผิดพลาดในสามสถานการณ์:
- ค่า start_Index เป็นตัวเลขติดลบ
- ค่า start_Index จะมากกว่าความยาวของสตริง
- ผลรวมของ start_Index และ sub_length ชี้เลยจุดสิ้นสุดของสตริง
ข้อผิดพลาดที่พบบ่อยคือการใช้ผลลัพธ์ของฟังก์ชัน IndexOf โดยไม่ตรวจสอบก่อน เมื่อ IndexOf ไม่พบอักขระ มันจะคืนค่า -1 และการส่งค่า -1 ไปยัง Substring จะทำให้เกิดข้อยกเว้น โค้ดต่อไปนี้จะป้องกันข้อผิดพลาดนั้น:
Module Module1 Sub Main() Dim st As String = "Guru99" Dim pos As Integer = st.IndexOf("9") If pos >= 0 Then Dim subst As String = st.Substring(pos) Console.WriteLine(subst) Else Console.WriteLine("Character not found") End If Console.ReadKey() End Sub End Module
การตรวจสอบดัชนีก่อนเรียกใช้ฟังก์ชันจะช่วยให้แอปพลิเคชันของคุณทำงานได้อย่างราบรื่น แม้ว่าสตริงอินพุตจะไม่มีอักขระที่คุณคาดหวังก็ตาม
การรับสตริงย่อยก่อนหรือหลังอักขระ
งานทั่วไปอย่างหนึ่งคือ...tracการแยกข้อความที่ปรากฏก่อนหรือหลังอักขระเฉพาะ เช่น การแยกที่อยู่อีเมลที่เครื่องหมาย @ VB.Net ไม่มีฟังก์ชันเฉพาะสำหรับสิ่งนี้ แต่คุณสามารถใช้ IndexOf ร่วมกับ Substring เพื่อให้ได้ผลลัพธ์ดังกล่าวได้
ข้อความก่อนอักขระ: เรียกใช้ IndexOf เพื่อค้นหาตัวอักษร จากนั้นส่งค่าดัชนีนั้นเป็นความยาวให้กับ Substring:
Module Module1 Sub Main() Dim email As String = "guru99@example.com" Dim position As Integer = email.IndexOf("@") Dim namePart As String = email.Substring(0, position) Console.WriteLine(namePart) Console.ReadKey() End Sub End Module
โค้ดนี้จะพิมพ์ guru99 ซึ่งเป็นส่วนหนึ่งของสตริงที่อยู่ก่อนเครื่องหมาย @
ข้อความหลังตัวอักษร: เพิ่มค่าดัชนีขึ้น 1 และปล่อยให้ฟังก์ชัน Substring ทำงานจนถึงจุดสิ้นสุดของสตริง:
Dim domainPart As String = email.Substring(position + 1) Console.WriteLine(domainPart)
ผลลัพธ์ที่ได้คือ example.com เมื่อตัวอักษรปรากฏมากกว่าหนึ่งครั้ง ให้ใช้ LastIndexOf แทน IndexOf เพื่อเริ่มจากตำแหน่งที่ปรากฏครั้งสุดท้ายแทนที่จะเป็นครั้งแรก
ความแตกต่างระหว่าง Substring กับ Left, Right และ Mid Functions
Visual Basic สืบทอดฟังก์ชันสตริงดั้งเดิมสามฟังก์ชันจากเวอร์ชันก่อนหน้า ได้แก่ Left, Right และ Mid ฟังก์ชันเหล่านี้อยู่ในไฟล์ .txt Microsoftเนมสเปซ .VisualBasic อาจให้ความรู้สึกคุ้นเคยมากกว่าสำหรับนักพัฒนาที่มาจาก VB แบบดั้งเดิม
- ซ้าย(สตริง, n) ส่งคืนอักขระ n ตัวแรกของสตริง
- ขวา(สตริง, n) ส่งคืนอักขระ n ตัวสุดท้ายของสตริง
- กลาง (สตริง, จุดเริ่มต้น, ความยาว) ส่งคืนส่วนหนึ่งจากตำแหน่งเริ่มต้น คล้ายกับฟังก์ชัน Substring
ความแตกต่างที่สำคัญคือวิธีการนับตำแหน่ง ฟังก์ชัน Mid เริ่มนับจาก 1 ดังนั้นอักขระตัวแรกจะอยู่ที่ตำแหน่งที่ 1 ในขณะที่เมธอด Substring เริ่มนับจาก 0 Substring เป็นวิธีการมาตรฐานของ .NET และทำงานเหมือนกันในทุกภาษาของ .NET ดังนั้นจึงเป็นตัวเลือกที่แนะนำสำหรับโค้ดใหม่ ควรสงวน Left, Right และ Mid ไว้สำหรับการบำรุงรักษาโปรเจกต์ Visual Basic เก่าๆ






