Các phương thức xử lý chuỗi nâng cao trong C#

Trong nhiều trường hợp bạn cần xử lý chuỗi theo một cách mà lớp String không hỗ trợ. Bạn có thể tự viết các hàm xử lý chuỗi cần thiết và tạo ra một thư viện dạng .dll (Dynamic Link Library : Thư viện liên kết động) để thêm vào ứng dụng khi cần thiết.

Trong bài viết này tôi sẽ tạo ra một lớp StringToolkit chứa các phương thức static để xử lý chuỗi theo các yêu cầu thường gặp khi lập trình C#. Bạn có thể chọn kiểu dự án là ClassLibrary hoặc gán Output type là Class Library để tạo ra file .dll.
Sau khi đọc xong các phương thức này bạn có thể nhận ra là nó hoàn toàn là nâng cao như tiêu đề đã viết. Đây chỉ là một cách viết để ta không bị nhầm lẫn với các phương thức của lớp string.

Cách viết các đoạn mã dưới đây tương đối dễ hiểu, tôi chỉ giải thích một số phần cần thiết.

Viết mã nguồn

1) Chuyển chuỗi về dạng Title Case

Mô tả: In hoa các kí tự đầu tiên của mỗi từ.

-Input:        Chào mừng bạn

-Output:     Chào Mừng Bạn

Code:

Ý tưởng thực hiện là đầu tiên ta sẽ chuyển chuỗi về chữ thường, sau đó tìm kiếm các kí tự đứng sau một khoảng trắng bất kì, rồi thay thế kí tự này bằng kí tự in hoa của nó.

 Để thực hiện trước tiên ta chuyển chuỗi sang chữ thường bằng phương thức ToLower(). Sao đó tiếp tục chuyển chuỗi thành một mảng char để dễ dàng thay đổi từng kí tự. Trước khi vào vòng lặp chính, ta cần chuyển kí tự đầu tiên thành chữ hoa bằng dòng lệnh

Vòng lặp chính như bạn có thể thấy, nó sẽ tìm tất cả các kí tự đứng sau khoảng trắng và chuyển thành chữ hoa.

 Phương thức này sử dụng lớp Regex (viết tắt của  Regular Expressions – tạm dịch là Biểu thức chính quy) trong namespace System.Text.RegularExpressions để tìm kiếm trong chuỗi truyền vào. Chuỗi pattern “\s\S” sẽ tìm kiếm các kí tự đứng sau khoảng trắng hoặc kí tự đầu câu.

Nếu cảm thấy cách làm trên khá phức tạp, bạn có thể thử cách sau, tương đối ngắn gọn và dễ hiểu hơn:

 Việc thêm khoảng trắng đầu chuỗi để chắc rằng kí tự đầu tiên không bị bỏ sót khi so khớp, cuối phương thức khoảng trắng dư này sẽ được cắt bỏ bằng Substring().

(*    “\s”  đại diện cho kí tự khoảng trắng)
*  “\S”  đại diện cho mọi kí tự trừ khoảng trắng)
*  “^”  kí tự đầu dòng
* “.” Mọi kí tự trừ kí tự xuống dòng
***  Vì Regular Expressions là một chủ đề lớn tương đối phức tạp, nó được sử dụng trong nhiều phần mềm và ngôn ngữ lập trình để phục vụ tìm kiếm hoặc xử lý văn bản. Bạn có thể tìm kiếm các chủ đề hướng dẫn về Regular Expressions trên mạng hoặc sách vở trước khi cảm thấy thích thú với nó.)
2) Chuyển chuỗi sang dạng Toggle Case

Mô tả: Chuyển các kí tự hoa thành thường và ngược lại

-Input:             Chào mừng bạn ĐếN với StanFord
-Output:          cHÀO MỪNG BẠN đẾn VỚI sTANfORD
Code:

3) Chèn một chuỗi vào chuỗi nguồn (tính từ trái hoặc phải)

Trong các phương thức này thay vì kiểm tra và thay đổi các giá trị của tham số, bạn có thể ném ra một ngoại lệ.

4) Xóa một chuỗi từ chuỗi nguồn

5) Thay thế một chuỗi con

Normal 0 false false false MicrosoftInternetExplorer4

Phương thức không làm gì khác ngoài việc sử dụng phương thức Replace của lớp Regex để thay thế. Nếu bạn thấy phương thức này không cần thiết, có thể loại bỏ khỏi lớp StringToolkit của bạn.
6) Loại bỏ các dấu tiếng Việt khỏi chuỗi

Một phương thức sử dụng Regex bằng cách tìm tất cả các kí tự tiếng Việt có dấu và thay thế bằng kí tự không dấu tương ứng. Bạn có thể thấy tôi đặt kí tự không dấu ở đầu mỗi chuỗi pattern. Việc lặp qua từng pattern sẽ tìm và thay thế các kí tự tìm thấy bằng kí tự đầu tiên của chuỗi pattern đó.

Đây là một cách viết nhanh chóng để thay thế với số lượng lớn các chuỗi.

 Phần kết

Trên đây chỉ là các ví dụ đơn giản, bạn có thể có các cách viết khác tối ưu hơn và có thể tạo thêm cho mình các phương thức xử lý khác. Tuy nhiên, trong một chừng mực nào đó, phương thức của bạn không nên “ôm đồm” quá nhiều tham số và chức năng để xử lý. Cảm ơn các bạn đã đọc bài này!

Nhận xét