CodeGym /Các khóa học /C# SELF /Các phương pháp nâng cao của class string

Các phương pháp nâng cao của class string

C# SELF
Mức độ, Bài học
Có sẵn

1. Tìm kiếm chuỗi con trong chuỗi

Ở bài trước bạn đã học cách lấy chuỗi con từ chuỗi. Còn ở bài này tụi mình sẽ học cách tìm một chuỗi trong chuỗi khác. Có 5 method xịn sò cho việc này:

Method Contains: chuỗi có chứa chuỗi con không?

Trả về true nếu chuỗi truyền vào có nằm trong chuỗi gọi method này.

string phrase = "Gió thay đổi";
bool hasWord = phrase.Contains("thay đổi"); // true
Kiểm tra sự tồn tại của chuỗi con bằng Contains

Tìm kiếm có phân biệt hoa thường nha! "gió".Contains("G") — false.

Method IndexOf: tìm vị trí chuỗi con

Rất giống với IndexOf trong mảng: tìm chuỗi con trong chuỗi (từ đầu đến cuối) và trả về index lần xuất hiện đầu tiên của chuỗi con.

string text = "dua hấu dua hấu";
int index = text.IndexOf("hấu"); // 2
Tìm vị trí chuỗi con bằng IndexOf
  • Nếu không tìm thấy gì, trả về -1.
  • Có thể truyền thêm vị trí bắt đầu: IndexOf("hấu", 4). Y chang như trong mảng luôn.

Method LastIndexOf: lần xuất hiện cuối cùng

Cũng giống như LastIndexOf trong mảng: tìm chuỗi con trong chuỗi (từ cuối về đầu) và trả về index lần xuất hiện đầu tiên của chuỗi con tính từ cuối.

string repeated = "bài tập bài tập";
int last = repeated.LastIndexOf("bài tập"); // 7
Tìm lần xuất hiện cuối cùng của chuỗi con bằng LastIndexOf

Bắt đầu/kết thúc chuỗi bằng chuỗi con cho trước

Cũng hay cần kiểm tra xem chuỗi của mình có bắt đầu (hoặc kết thúc) bằng chuỗi con nào đó không. Có hai method cho việc này:

  • StartsWith — kiểm tra chuỗi bắt đầu bằng chuỗi con nào đó;
  • EndsWith — kiểm tra chuỗi kết thúc bằng chuỗi con cho trước.
string fileName = "photo.jpg";
bool isJpg = fileName.EndsWith(".jpg"); // true

string email = "support@company.com";
bool isSupport = email.StartsWith("support"); // true
Kiểm tra đầu và cuối chuỗi

Nếu muốn so sánh không phân biệt hoa thường, truyền thêm tham số chỉ định chế độ so sánh (xem docs về StringComparison.OrdinalIgnoreCase).

2. Method Replace: thay thế ký tự và chuỗi con

Method Replace thay tất cả các lần xuất hiện của chuỗi A thành chuỗi B. Sinh ra để xử lý lỗi gõ, kiểm duyệt và thay biến trong template! (Đùa thôi.)

string address = "London, phố Baker";
string updated = address.Replace("London", "Paris");
Console.WriteLine(updated); // "Paris, phố Baker"
Thay thế chuỗi con bằng Replace
  • Có thể thay cả ký tự riêng lẻ: str.Replace('a', 'z')
  • Lưu ý: tất cả các lần xuất hiện đều được thay, không chỉ lần đầu tiên.

3. Method Split: cắt chuỗi thành từng phần

Method Split làm như sau: lấy chuỗi của bạn và cắt nó thành các phần, dùng separator — ký tự hoặc chuỗi để chia. Method trả về mảng chuỗi đã cắt từ chuỗi gốc.

string[] parts = originalString.Split(separator);
Cú pháp method Split
  • separator — ký tự hoặc mảng ký tự sẽ dùng làm dấu chia.

Ví dụ đơn giản nhất

Cắt chuỗi theo dấu cách:

string input = "táo lê cam chuối";
string[] fruits = input.Split(' '); 	// chứa mảng ["táo","lê","cam","chuối"]
Console.WriteLine(fruits[0]); 			// "táo"
Console.WriteLine(fruits[1]); 			// "lê"

Ở đây tụi mình nhận được mảng chuỗi dài 4, mỗi từ là một phần tử riêng.

Nhiều dấu chia

Đôi khi trong chuỗi không chỉ có một loại dấu chia. Ví dụ, user có thể nhập giá trị bằng dấu cách, dấu phẩy hoặc dấu chấm phẩy.

Lúc này có thể dùng mảng ký tự làm dấu chia:

string input = "táo, lê; cam chuối";
char[] separators = { ' ', ',', ';' };
string[] fruits = input.Split(separators, StringSplitOptions.RemoveEmptyEntries);

Bonus: tham số tuỳ chọn StringSplitOptions.RemoveEmptyEntries sẽ loại bỏ các phần rỗng. Cái này cần nếu user nhập nhiều dấu chia liền nhau — ví dụ hai dấu cách hoặc kiểu như "táo,, lê".

Cắt theo chuỗi con

Dấu chia có thể là chuỗi, không chỉ ký tự. Ví dụ, nếu bạn có file CSV với dấu chia là ";" hoặc |:

// Dấu chia là một ký tự
string data = "Ivanov;Petrov;Sidorov";
string[] names = data.Split(';'); // theo ký tự ';'

// Hoặc nếu dấu chia là cả chuỗi:
string log = "2024-01-01::Lỗi::Không thực hiện được bài tập";
string[] separators = { "::" };
string[] parts = log.Split(separators);

4. Method Join: ghép mảng chuỗi lại

Method Join làm ngược lại: nhận mảng chuỗi và ghép lại thành một chuỗi, chèn dấu chia bạn chọn giữa các phần tử.

string result = string.Join(separator, arrayOfStrings);
Cú pháp method Join
  • separator — chuỗi sẽ được chèn giữa các phần tử.
  • arrayOfStrings — mảng hoặc collection chuỗi (string[], List<string> v.v.).

Ví dụ đơn giản nhất

Tạo một chuỗi từ mảng chuỗi, ngăn cách bằng dấu phẩy:

string[] items = { "táo", "lê", "cam", "chuối" };
string joined = string.Join(", ", items);
Console.WriteLine(joined); // "táo, lê, cam, chuối"
Ghép mảng chuỗi bằng Join

Ghép với dấu chia rỗng — nối chuỗi liền nhau

Đôi khi chỉ muốn ghép chuỗi liền nhau, không chèn gì giữa chúng:

string[] parts = { "Tôi", "yêu", "C#" };
string message = string.Join("", parts);
Console.WriteLine(message); // "TôiyêuC#"
Ghép chuỗi không có dấu chia

5. Lỗi phổ biến

Rất nhiều bạn mới học hay quên xoá khoảng trắng thừa sau khi tách chuỗi bằng Split. Ví dụ, nếu user gõ "táo, lê ,chuối", sau Split sẽ có phần tử kiểu " lê ". Nếu convert sang số hoặc so sánh, sẽ bị bug. Hãy dùng Trim() sau Split cho từng phần tử — thói quen tốt đó.

Thứ hai — phần tử rỗng thừa. Khi user nhập hai dấu chia liền nhau hoặc bắt đầu/kết thúc chuỗi bằng dấu chia, Split có thể trả về phần tử rỗng. Bật StringSplitOptions.RemoveEmptyEntries để tránh lỗi sau này.

Nếu mảng cho Join có phần tử rỗng hoặc null, Join sẽ bỏ qua. Nhưng nếu bạn không muốn vậy (ví dụ báo cáo cần hiển thị giá trị bị bỏ qua), phải xử lý mảng thủ công trước.

Và nữa: Split không bao giờ thay đổi chuỗi gốc, mà trả về mảng mới. Join cũng không thay đổi mảng gốc, mà trả về chuỗi mới. Nhớ nhé: chuỗi và mảng trong C# là immutable (không thay đổi được).

2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Thay thế chuỗi con trong văn bản bằng phương thức `Replace`
Thay thế chuỗi con trong văn bản bằng phương thức `Replace`
2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Tách chuỗi thành các phần và ghép lại
Tách chuỗi thành các phần và ghép lại
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION