Giới thiệu
Phương thức Substring() của lớp String trích xuất một đoạn con từ chuỗi hiện tại. Có hai overload: từ vị trí chỉ định đến hết chuỗi, hoặc từ vị trí chỉ định với độ dài cho trước.
Cú pháp
public string Substring(int startIndex); public string Substring(int startIndex, int length);
- startIndex: Vị trí bắt đầu (0-based).
- length: Số ký tự cần lấy. Nếu bỏ qua, lấy đến hết chuỗi.
Ví dụ 1 - Substring đến cuối chuỗi
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 từ index 4 = " + str1.Substring(4)); // "erine"
Console.WriteLine("\nString2 = " + str2);
Console.WriteLine("String2 ToLowerInvariant = " + str2.ToLowerInvariant());
Console.WriteLine("String2 Substring từ index 2 = " + str2.Substring(2)); // "RS"
}
}
Kết quả
String1 = Katherine String1 ToUpperInvariant = KATHERINE String1 Substring từ index 4 = erine String2 = PQRS String2 ToLowerInvariant = pqrs String2 Substring từ index 2 = RS
Ví dụ 2 - Substring với độ dài xác định
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 từ index 4, độ dài 4 = " + str1.Substring(4, 4)); // "book"
Console.WriteLine("\nString2 = " + str2);
Console.WriteLine("String2 ToLowerInvariant = " + str2.ToLowerInvariant());
Console.WriteLine("String2 Substring từ index 0, độ dài 5 = " + str2.Substring(0, 5)); // "Ultra"
}
}
Kết quả
String1 = Notebook String1 ToUpperInvariant = NOTEBOOK String1 Substring từ index 4, độ dài 4 = book String2 = Ultrabook String2 ToLowerInvariant = ultrabook String2 Substring từ index 0, độ dài 5 = Ultra
Lưu ý quan trọng
- Chuỗi trong .NET immutable,
Substring()trả về chuỗi mới (trước .NET Core 2.1 có thể chia sẻ bộ nhớ nội bộ). - Ném
ArgumentOutOfRangeExceptionnếu startIndex < 0, > Length, hoặc length < 0, hoặc startIndex + length > Length. - Hiệu suất: .NET Core 2.1+ tối ưu Substring không copy dữ liệu ngay (span-like), nhưng code không nên phụ thuộc hành vi này.
- Để tránh cấp phát, dùng
ReadOnlySpan(.NET Core 2.1+):str.AsSpan(start, length). Substring(0, len)lấy prefix,Substring(str.Length - len)lấy suffix.