Bài viết hôm nay sẽ giới thiệu một số phương pháp trong việc cắt, tách chuỗi từ một chuỗi ban đầu. Trong thư viện DotNet Framework cung cấp phương thức Split rất hữu ích trong việc tách chuỗi, ta có thể gặp phương thức này dưới nhiều dạng, đối tượng khác nhau, nhưng chung quy lại tất cả đều có chức năng giống nhau trong giới hạn thao tác xử lý chuỗi.
1. String.Split
Phương thức hỗ trợ cho việc chia chuỗi ban đầu thành nhiều chuỗi con thông qua ký tự chia tách nào đó. Ví dụ bên dưới, ban đầu ta đưa vào chuỗi “i like csharp dotnet” tiếp theo dùng phương thức split với đối số là ký tự ‘ ‘ (1 khoảng trắng). Như vậy chuỗi ban đầu sẽ tách thành nhiều chuỗi con, lấy ký tự khoảng trắng làm cơ sở để chia tách. Kết quả trả về của phương thức Split là mảng các chuỗi.
Lưu ý: Đối số của phương thức Split là 1 ký tự chứ không phải là một chuỗi. Ví dụ: Nếu từ chia tách là ký tự @ thì đối số của Split là Split(‘@’ ) , không nhầm lẫn với Split(“@” )

2. Regex.Split
Trong namespace System.Text.RegularExpression có hỗ trợ phương thức Regex.Split cho việc xử lý chia tách chuỗi rất hiệu quả. Nếu như String.Split đối tượng dùng để phân tách chỉ là một ký tự thì trong Regex.Split đối tượng phân tách có thể là một chuỗi, không chỉ thế còn có thể thiết lập quy luật cho chuỗi để có thể có những chuỗi phân tách đa dạng hơn.
Tham khảo thêm về Regular Expression
RegularExpression trong Lập trình Csharp | MicrosoftTech.Net
Trong ví dụ dưới, tôi sẽ lần lượt đi qua 3 ví dụ nhỏ để thấy được những điểm mạnh trong việc xử lý chuỗi của Regex.Split. Phương thức này nhận 2 đối số, đối số thứ nhất là chuỗi gốc đưa vào, đối số thứ hai là partern – chuỗi mẫu quy định quá trình xử lý chuỗi. Dễ nhận thấy trong ví dụ bên dưới, khi xuất ra kết quả của các từ đã cắt ra từ chuỗi ban đầu tôi có kèm theo 1 ký tự dấu chấm ở cuối nhằm mục đích cho biết vị trí kết thúc của từ (sau từ không còn khoảng trắng hay bất kỳ ký tự nào khác)
- Đầu tiên là việc cắt chuỗi với đối tượng chia tách là một chuỗi nhiều ký tự. Xét điểm này Regex.Split tốt hơn hẳn so với String.Split
- Ví dụ thứ hai ta thấy rằng trong chuỗi mẫu, giữa các từ có số lượng khoảng trắng không bằng nhau, nên không thể đưa ra số lượng khoảng trắng chính xác trong chuỗi chia cắt. Ở đây ta dùng chuỗi [ ]+ để quy định đó là chuỗi có từ 1 khoảng trắng trở lên. Lưu ý: Chuỗi [ ]* dùng để quy định chuỗi có ít nhất 0 ký tự khoảng trắng, chuỗi này dùng để tách câu thành các chữ cái.
- Trong ví dụ thứ ba, chuỗi ban đầu gồm các ký tự chữ cái và số, yêu cầu chỉ lấy ra các chữ cái. Tới đây ta dùng chuỗi phân tách là [0-9]+ quy định chuỗi chứa các ký tự chữ số và có ít nhất 1 ký tự.

3. String.Split Option
Ta thấy rằng ban đầu String.Split chỉ hỗ trợ đối tượng phân tách là 1 ký tự; Nhưng trên thực tế, String.Split còn 1 phương thức Overload có thể nhận đối tượng phân tách là một chuỗi thông qua đối số là một mảng ký tự. Lưu ý: bắt buộc phải có 2 đối số, đối số thứ hai là StringSplitOptions. Ví dụ bên dưới hướng dẫn 2 cách thực hiện hiện phương pháp vừa nêu.
Trong cách 1, 2 ký tự phân tách được đặt trong 2 phần tử của mảng ký tự đi kèm với đối số StringSplitOptions.RemoveEmptyEntries. Xét về bản chất, phương thức này sẽ chia chuỗi ban đầu thành 7 kết quả gồm 4 từ là 3 chuỗi trắng, chuỗi trắng ở đây chính là 3 vị trí nằm giữa \r và \n, nhưng vì ta thấy trong kết quả không cần 3 chuỗi đó nên dùng đối số kèm theo để loại ra khỏi kết quả.
Còn trong cách 2, đối số đưa vào là mảng string chỉ có 1 phần tử đầu tiên là chuỗi ký tự phân tách, ở đây dùng đối số đi kèm là StringSplitOptions.None vì kết quả trả về không có chuỗi trắng. Mặc dù như vậy nhưng bắt buộc phải cung cấp đối số đó cho phương thức Split.


Lời bình mới nhất