1. Giới thiệu
Trong thực tế, bạn sẽ thường gặp mấy bài toán với string như sau:
- Lấy độ dài chuỗi (và kiểm tra xem nó có rỗng không).
- Đổi chữ hoa/thường (cho thành TOÀN BỘ HOA hoặc toàn bộ thường).
- Kiểm tra xem chuỗi có chứa từ hoặc ký tự cần tìm không.
- Thay "từ xấu" bằng từ lịch sự hơn.
- Tách chuỗi thành các phần theo dấu phân cách ("danh sách số điện thoại cách nhau bằng dấu phẩy").
- Xóa khoảng trắng ở đầu và cuối chuỗi.
- Lấy một phần chuỗi (ví dụ, 3 ký tự đầu của họ).
- So sánh hai chuỗi — giống nhau không nếu bỏ qua hoa/thường.
Và cho mỗi bài toán như vậy, class string đều có method riêng.
Bảng các method quan trọng
| Thao tác | Method/Property | Ví dụ |
|---|---|---|
| Độ dài chuỗi | |
|
| Ký tự đầu tiên | |
|
| Ký tự cuối cùng | |
|
| Chuyển sang chữ thường | |
|
| Chuyển sang chữ hoa | |
|
| Kiểm tra có chuỗi con | |
|
| Vị trí chuỗi con | |
|
| Lấy một phần chuỗi | |
|
| So sánh chuỗi | |
|
| Xóa khoảng trắng | |
|
| Tách theo dấu phân cách | |
|
| Nối mảng thành chuỗi | |
|
| Thay một phần | |
|
| Chuỗi rỗng? | |
|
Hôm nay mình sẽ giải thích một số cái trong số này.
2. Làm việc với string như mảng
Độ dài chuỗi: property Length
Cái đơn giản nhất — xem chuỗi có bao nhiêu ký tự. Dùng property Length nhé. Ví dụ:
string name = "Arkadiy";
Console.WriteLine(name.Length); // In ra: 7
- Length là property (không phải method), nên không cần ngoặc tròn.
- Nếu chuỗi rỗng (""), độ dài sẽ là 0.
Đôi khi nên kiểm tra độ dài chuỗi trước khi làm gì đó "nguy hiểm" (ví dụ, lấy substring).
Lấy ký tự theo index: indexer [i]
Giống như làm việc với mảng: string là mảng ký tự. Ví dụ:
string hello = "Privet";
char firstChar = hello[0]; // 'P'
char lastChar = hello[^1]; // 't'
Console.WriteLine(firstChar);
- Index bắt đầu từ 0 nhé!
- Cẩn thận: nếu truy cập index không tồn tại (hello[100]), sẽ bị exception.
3. So sánh chuỗi
Toán tử == và !=
Trong C#, mấy toán tử này chỉ đơn giản là so sánh nội dung hai chuỗi.
string word1 = "Hello";
string word2 = "Hello";
bool areEqual = word1 == word2; // true
Method Equals
Khác với toán tử ==, method Equals có thể truyền thêm tham số. Ví dụ, so sánh chuỗi không phân biệt hoa/thường — khi "Mama" == "mama" và bằng "MAMA". Ví dụ:
string pass1 = "Qwerty";
string pass2 = "qwerty";
// so sánh bình thường có phân biệt hoa/thường
bool isSame = pass1.Equals(pass2); // false
// so sánh không phân biệt hoa/thường
bool ignoreCase = pass1.Equals(pass2, StringComparison.OrdinalIgnoreCase); // true
4. Đổi chữ hoa/thường
Để chuyển string sang chữ hoa (hoặc thường), class string có 2 method đặc biệt: ToLower() và ToUpper().
Muốn user thấy message kiểu "QUAN TRỌNG!"? Hay cần chuyển hết tên về chữ thường để so sánh? Dễ thôi:
string text = "Toi Khong So Con Soi Xam!";
Console.WriteLine(text.ToUpper()); // TOI KHONG SO CON SOI XAM!
Console.WriteLine(text.ToLower()); // toi khong so con soi xam!
- Lưu ý: string gốc không bị thay đổi!
- Có thể dùng để kiểm tra trùng chuỗi không phân biệt hoa/thường.
5. Xóa khoảng trắng thừa
Giả sử user lỡ (hoặc cố tình, ai biết được) thêm khoảng trắng trước/sau tên? Trim sẽ giúp! Có 3 loại:
- Trim — xóa hết khoảng trắng ở đầu và cuối chuỗi;
- TrimStart — xóa khoảng trắng ở đầu chuỗi;
- TrimEnd — xóa khoảng trắng ở cuối chuỗi.
string raw = " Gosha ";
string cleaned = raw.Trim(); // "Gosha"
Console.WriteLine($"[{cleaned}]");
6. Lấy substring: Substring
Đôi khi cần lấy ra một phần của chuỗi thôi.
string word = "Privet";
string part = word.Substring(2); // "ivet"
string part2 = word.Substring(2, 3); // "ive"
- Substring(startIndex) — từ ký tự startIndex đến hết.
- Substring(startIndex, length) — bắt đầu từ startIndex lấy length ký tự.
Chú ý: nếu vượt quá giới hạn chuỗi hoặc length < 0, sẽ bị exception!
7. Kiểm tra chuỗi rỗng
Trước khi dùng string (ví dụ, trong interpolation) nên kiểm tra nó không phải null và không rỗng, kẻo bị lỗi hoặc kết quả bất ngờ.
a) Kiểm tra null bằng toán tử ==
string s = null;
if (s == null)
Console.WriteLine("Chuỗi bằng null");
Nhược điểm: không bắt được chuỗi rỗng ("").
b) Kiểm tra bằng string.IsNullOrEmpty()
Kiểm tra cả null lẫn chuỗi rỗng:
string s = "";
if (string.IsNullOrEmpty(s))
Console.WriteLine("Chuỗi rỗng hoặc bằng null");
c) Kiểm tra bằng string.IsNullOrWhiteSpace()
Thêm nữa, nó còn tính cả chuỗi chỉ toàn khoảng trắng, tab và ký tự “vô hình”:
string s = " ";
if (string.IsNullOrWhiteSpace(s))
Console.WriteLine("Chuỗi rỗng, null hoặc chỉ có khoảng trắng");
8. Lỗi thường gặp khi dùng string method
- Lỗi phổ biến nhất — quên rằng string là immutable (không thay đổi được), như đã nói ở trên.
- Một lỗi nữa — quên vụ phân biệt hoa/thường khi tìm kiếm và so sánh.
Ví dụ, nếu user nhập tên "andrey", còn trong danh sách đã có "Andrey", thì dùng Contains hoặc == đơn giản có thể không ra, nếu bạn không chuyển cả hai về cùng một kiểu chữ hoặc không dùng overload phù hợp của method.
Cũng nên cẩn thận với các method trả về index. Index bắt đầu từ 0, nếu trả về -1 nghĩa là không tìm thấy, chứ không phải "index 0".
GO TO FULL VERSION