1. Tìm hiểu kỹ hơn về kiểu string
Kiểu string là một trong những kiểu được dùng nhiều nhất trong C#. Có khi là dùng nhiều nhất luôn ấy. Kiểu này siêu xịn vì bạn có thể lưu văn bản trong biến kiểu này. Ngoài ra, khác với các kiểu int và double, object kiểu string có cả đống hàm khác nhau, nhờ đó bạn có thể làm nhiều trò hay ho với chuỗi.
Thêm nữa, tất cả object trong C# (đúng là tất cả luôn) đều có thể chuyển thành kiểu string. Hoặc nói chuẩn hơn, mọi object trong C# đều trả về biểu diễn dạng text (chuỗi) của nó. Mình sẽ còn quay lại kiểu này nhiều lần nữa (vì nó quá hữu ích và thú vị), nhưng hôm nay mình sẽ giới thiệu những thứ cơ bản nhất.
Tạo biến kiểu string
Kiểu string được tạo ra để lưu trữ chuỗi (văn bản). Để tạo một biến có thể lưu text trong code, bạn dùng lệnh:
string ten;
Ở đây ten là tên biến.
Ví dụ:
| Lệnh | Mô tả |
|---|---|
| string name; | Tạo biến chuỗi name |
| string message; | Tạo biến chuỗi message |
| string text; | Tạo biến chuỗi text |
Cũng giống như với kiểu int và double, bạn có thể dùng cú pháp ngắn gọn để tạo nhiều biến kiểu string cùng lúc:
string ten1, ten2, ten3;
2. Gán giá trị cho biến kiểu string
Để gán giá trị cho biến kiểu string, bạn dùng lệnh:
ten = "giatri";
Và đây là điểm khác biệt đầu tiên so với các kiểu đã học. Tất cả giá trị kiểu string đều là chuỗi văn bản và phải nằm trong dấu ngoặc kép.
Ví dụ:
| Lệnh | Ghi chú |
|---|---|
| string name = "Anya"; | Biến name chứa text Anya |
| string city = "New York"; | Biến city chứa text New York |
| string message = "Hello!"; | Biến message chứa text Hello! |
3. Khởi tạo biến kiểu string
Giống như với kiểu int và double, bạn có thể khởi tạo biến kiểu string ngay khi tạo biến. Thực ra, bạn có thể làm vậy với tất cả các kiểu trong C#. Nên mình sẽ không nhắc lại nữa đâu.
string ten1 = "chuoi1", ten2 = "chuoi2";
Ví dụ tạo và khởi tạo biến
string name = "Anya", city = "New York", message = "Hello!";
Chỉ thay đổi được biến đã có giá trị
Trình biên dịch C# sẽ báo lỗi nếu bạn khai báo biến mà không gán giá trị rồi lại dùng nó.
Code kiểu này sẽ không chạy được đâu:
string name;
Console.WriteLine(name); // Biến name chưa được khởi tạo. Chương trình sẽ không biên dịch được.
int a;
a++; // Biến a chưa được khởi tạo. Chương trình sẽ không biên dịch được.
double x;
double y = x; // Biến x chưa được khởi tạo. Chương trình sẽ không biên dịch được.
4. Nối chuỗi — ghép chuỗi lại
Có một thứ rất hay và đơn giản bạn có thể làm với chuỗi trong C# — đó là ghép chúng lại. Thao tác này gọi là nối chuỗi. Hoặc để dễ nhớ thì gọi là Kon-Ko-Te-Na-Tsi-Ya. Nhưng thường mọi người gọi là "ghép chuỗi" hoặc đơn giản là "cộng chuỗi".
Để ghép hai chuỗi, bạn dùng dấu +. Đơn giản lắm:
"giatri1" + "giatri2"
Ví dụ:
| Lệnh | Ghi chú |
|---|---|
| string name = "Anya" + "Anya"; | name chứa chuỗi AnyaAnya |
| string city = "New York" + "Anya"; | city chứa chuỗi New YorkAnya |
| string message = "Hello! " + "Anya"; | message chứa chuỗi Hello! Anya |
Và tất nhiên, bạn có thể cộng nhiều chuỗi cùng lúc, hoặc cộng chuỗi với biến.
Ví dụ:
string name = "Anya"; // name chứa chuỗi Anya
string city = "New York"; // city chứa chuỗi New York
string message = "Hello!" + city + name + city; // message chứa chuỗi Hello!New YorkAnyaNew York
5. Chuỗi rỗng
Ở ví dụ cuối, bạn thấy text trong biến message hơi khó đọc vì thiếu dấu cách. Để thêm một hoặc nhiều dấu cách, bạn chỉ cần viết chúng trong code và đặt trong dấu ngoặc kép. Dễ lắm:
" "
À mà, nếu bạn không để gì giữa hai dấu ngoặc kép (chỉ viết hai dấu ngoặc kép liền nhau), bạn sẽ có cái gọi là "chuỗi rỗng":
""
Về lý thuyết thì nó vẫn là chuỗi, nhưng khi in ra màn hình thì không hiện gì cả. Khi ghép với chuỗi khác cũng không có gì xảy ra. Nó giống như số 0 nhưng dành cho chuỗi.
6. Escape ký tự đặc biệt trong chuỗi
Bạn biết rồi đấy, chuỗi được bao bởi dấu ngoặc kép. Nhưng nếu muốn chèn dấu ngoặc kép vào trong chuỗi thì sao? Nếu mình viết dấu ngoặc kép trong chuỗi, liệu trình biên dịch có hiểu đó là kết thúc chuỗi không?
Đúng rồi. Nó sẽ hiểu vậy. Nên dấu ngoặc kép trong text phải thay bằng cặp ký tự \". Code sẽ như này:
string quote = "Anh ấy nói: \"Xin chào!\"";
Console.WriteLine(quote); // Anh ấy nói: "Xin chào!"
Thực ra còn lắt léo hơn chút. Ký tự \ được coi là ký tự đặc biệt (ký tự điều khiển) trong chuỗi. Nhờ nó bạn có thể chèn các "ký tự không in được" như xuống dòng, tab, v.v. Còn nếu muốn chèn chính ký tự \ thì phải viết hai lần.
Dưới đây là 4 tổ hợp hay dùng nhất:
| Cách viết | Ý nghĩa |
|---|---|
| \n | Xuống dòng (newline) |
| \t | Tab (thụt lề) |
| \\ | Chèn đúng ký tự \ |
| \" | Dấu ngoặc kép trong chuỗi |
Ví dụ:
string multiline = "Chuoi 1\nChuoi 2";
Console.WriteLine(multiline);
Kết quả in ra:
// Chuoi 1
// Chuoi 2
7. Interpolation chuỗi ($-chuỗi)
C# là ngôn ngữ hiện đại nên cho phép bạn dễ dàng và đẹp mắt chèn giá trị biến vào trong chuỗi bằng interpolation — chỉ cần thêm ký tự $ trước dấu ngoặc kép, và trong chuỗi dùng dấu ngoặc nhọn {}. Cái này chắc bạn biết rồi.
Nhưng có thể bạn chưa biết là trong dấu ngoặc nhọn bạn có thể dùng cả biểu thức và gọi hàm luôn! Ví dụ:
string name = "Olya";
int birthYear = 1999;
string info = $"Toi ten la {name}, toi {2025-birthYear} tuoi.";
Console.WriteLine(info); // Toi ten la Olya, toi 26 tuoi.
Cách này giúp code dễ đọc hơn hẳn và giảm lỗi (và cả dấu ngoặc nữa). Về interpolation mình sẽ nói kỹ hơn ở bài khác, nhưng với trường hợp đơn giản thì cứ dùng thoải mái nhé.
8. Các hàm riêng của chuỗi
Kiểu string có các hàm riêng (còn gọi là method). Nhiều lắm, và chúng giúp coder nhàn hơn rất nhiều. Hôm nay mình sẽ giới thiệu vài cái đơn giản nhất. Ví dụ:
| Hàm | Mô tả | Kết quả ví dụ |
|---|---|---|
| str.Length | Độ dài chuỗi | "abc".Length → 3 |
| str.ToUpper() | Chuyển thành chữ hoa | "abc".ToUpper() → "ABC" |
| str.ToLower() | Chuyển thành chữ thường | "ABC".ToLower() → "abc" |
| str.Trim() | Xóa khoảng trắng ở hai đầu | " x y ".Trim() → "x y" |
Ví dụ dùng hàm chuỗi
Tất cả các hàm này gọi như sau: bien.ham(...) .
Lấy độ dài chuỗi:
string name = "Andrey";
int length = name.Length;
Console.WriteLine(length); // 6, vì có 6 ký tự
Chuyển chuỗi thành chữ hoa hoặc chữ thường:
string original = "Privet";
Console.WriteLine(original.ToUpper()); // PRIVET
Console.WriteLine(original.ToLower()); // privet
Xóa khoảng trắng ở hai đầu (rất hữu ích khi nhập từ bàn phím):
string messy = " hello ";
Console.WriteLine(messy.Trim()); // "hello"
Mỗi hàm như vậy trả về một chuỗi mới, chuỗi cũ không thay đổi.
GO TO FULL VERSION