เมธอด String.Substring() ใน C# ใช้ดึง substring (สตริงย่อย) จากสตริงต้นทาง เริ่มจากตำแหน่งที่ระบุ จนถึงท้ายสตริง หรือความยาวที่ระบุ
ไวยากรณ์ (Syntax)
public string Substring(int startIndex); public string Substring(int startIndex, int length);
- startIndex — ตำแหน่งเริ่มต้น (zero-based)
- length — จำนวนตัวอักษรที่จะดึง (ถ้าไม่ระบุ = จนถึงท้ายสตริง)
- คืนค่า
stringใหม่ (สตริงเดิมไม่เปลี่ยน) - โยน
ArgumentOutOfRangeExceptionหาก index/length ไม่ถูกต้อง
ตัวอย่างที่ 1: Substring แบบไม่ระบุความยาว (จนถึงท้าย)
using System;
public class Demo
{
public static void Main(string[] args)
{
string str1 = "Katherine";
string str2 = "PQRS";
Console.WriteLine("String1 = " + str1);
Console.WriteLine("String1 ToUpperInvariant = " + str1.ToUpperInvariant());
Console.WriteLine("String1 Substring from index 4 = " + str1.Substring(4)); // "erine"
Console.WriteLine("\nString2 = " + str2);
Console.WriteLine("String2 ToLowerInvariant = " + str2.ToLowerInvariant());
Console.WriteLine("String2 Substring from index 2 = " + str2.Substring(2)); // "RS"
}
}
ผลลัพธ์
String1 = Katherine String1 ToUpperInvariant = KATHERINE String1 Substring from index 4 = erine String2 = PQRS String2 ToLowerInvariant = pqrs String2 Substring from index 2 = RS
ตัวอย่างที่ 2: Substring ระบุความยาว
using System;
public class Demo
{
public static void Main(string[] args)
{
string str1 = "Notebook";
string str2 = "Ultrabook";
Console.WriteLine("String1 = " + str1);
Console.WriteLine("String1 ToUpperInvariant = " + str1.ToUpperInvariant());
Console.WriteLine("String1 Substring from index 4, length 4 = " + str1.Substring(4, 4)); // "book"
Console.WriteLine("\nString2 = " + str2);
Console.WriteLine("String2 ToLowerInvariant = " + str2.ToLowerInvariant());
Console.WriteLine("String2 Substring from index 0, length 5 = " + str2.Substring(0, 5)); // "Ultra"
}
}
ผลลัพธ์
String1 = Notebook String1 ToUpperInvariant = NOTEBOOK String1 Substring from index 4, length 4 = book String2 = Ultrabook String2 ToLowerInvariant = ultrabook String2 Substring from index 0, length 5 = Ultra
สรุป
Substring(startIndex)— ดึงจาก startIndex จนถึงท้ายSubstring(startIndex, length)— ดึงจาก startIndex ยาว length ตัวอักษร- สตริงใน C# เป็น immutable — Substring คืนสตริงใหม่ ไม่เปลี่ยนต้นทาง
- Index เริ่มจาก 0 — ตัวแรกคือ index 0
- ใน .NET Core 2.1+ / .NET 5+ ควรใช้
AsSpan()แทนสำหรับ performance — ไม่ allocate string ใหม่:ReadOnlySpan<char> span = str.AsSpan(4, 4); // "book" - zero allocation
กรณีผิดพลาดที่พบบ่อย
string s = "abc";
// s.Substring(3) -> "" (empty string) - OK
// s.Substring(4) -> ArgumentOutOfRangeException
// s.Substring(0, 4) -> ArgumentOutOfRangeException (length > remaining)
// ป้องกัน:
if (startIndex >= 0 && startIndex < s.Length)
{
int len = Math.Min(length, s.Length - startIndex);
var sub = s.Substring(startIndex, len);
}
ตัวอย่างใช้งานจริง: ดึงนามสกุลไฟล์
string filename = "document.pdf";
int dotIndex = filename.LastIndexOf('.');
string extension = (dotIndex >= 0) ? filename.Substring(dotIndex + 1) : "";
Console.WriteLine(extension); // "pdf"