Tham khảo tài liệu ''giáo trình phân tích ứng dụng quy trình tạo chuỗi dùng phương thức peek qua lớp regex p4'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Ngơn Ngữ Lập Trình C# { // tạo chuỗi để làm việc string s1 = “Mot, hai, ba Trung Tam Dao Tao CNTT”; // tạo ký tự khoảng trắng dấu phẩy const char Space = ‘ ‘; const char Comma = ‘,’; // tạo mảng phân cách char[] delimiters = new char[] { Space, Comma }; string output = “”; int ctr = 1; // thực việc chia chuỗi dùng vòng lặp // đưa kết vào mảng chuỗi foreach ( string subString in s1.Split(delimiters) ) { output += ctr++; output += “: ”; output += subString; output += “\n”; }// end foreach Console.WriteLine( output ); }// end Main }// end class } // end namespace Kết quả: 1: Mot 2: 3: hai 4: 5: ba 6: Trung 7: Tam 8: Dao 9: Tao Xử Lý Chuỗi 288 Ngôn Ngữ Lập Trình C# 10: CNTT Đoạn chương trình bắt đầu việc tạo chuỗi để minh họa việc phân tích: string s1 = “Mot, hai, ba Trung Tam Dao Tao CNTT”; Hai ký tự khoảng trắng dấu phẩy dùng làm ký tự phân cách Sau phương thức Split() gọi chuỗi này, truyền kết vào vòng lặp: foreach ( string subString in s1.Split(delimiters) ) Chuỗi output chứa chuỗi kết khởi tạo chuỗi rỗng Ở tạo chuỗi output bốn bước Đầu tiên nối giá trị biến đếm ctr, thêm dấu hai chấm, đưa chuỗi chia từ chuỗi ban đầu, cuối thêm ký tự qua dòng Và bốn bước lặp đến chuỗi khơng cịn chia Có vấn đề cần nói kiểu liệu string khơng thiết kế cho việc thêm vào chuỗi định dạng sẵn để tạo chuỗi vòng lặp trên, nên phải thêm vào ký tự Một lớp StringBuilder tạo để phục vụ cho nhu cầu thao tác chuỗi tốt Thao tác chuỗi dùng StringBuilder Lớp StringBuilder sử dụng để tạo bổ sung chuỗi Hay nói lớp phần đóng gói khởi dựng cho String Một số thành viên quan trọng StringBuilder tóm tắt bảng 10.2 sau: Phương thức Capacity() Chars() Length() MaxCapacity() Append() AppendFormat() EnsureCapacity() Insert() Replace() Xử Lý Chuỗi System.StringBuilder Ý nghĩa Truy cập hay gán số ký tự mà StringBuilder nắm giữ Chỉ mục Thiết lập hay truy cập chiều dài chuỗi Truy cập dung lượng lớn StringBuilder Nối kiểu đối tượng vào cuối StringBuilder Thay định dạng xác định giá trị định dạng đối tượng Đảm bảo StringBuilder thời có khả tối thiểu lớn giá trị xác định Chèn đối tượng vào vị trí xác định Thay tất thể ký tự xác định với ký tự Bảng 10.2 Phương thức lớp StringBuilder 289 Ngơn Ngữ Lập Trình C# Khơng giống String, StringBuilder dễ thay đổi Khi bổ sung đối tượng StringBuilder làm thay đổi giá trị thật chuỗi, khơng phải Ví dụ minh họa 10.4 thay đối tượng String đối tượng StringBuilder Ví dụ minh họa 10.4 : Sử dụng chuỗi StringBuilder namespace Programming_CSharp { using System; using System.Text; public class StringTester { static void Main() { // khởi tạo chuỗi để sử dụng string s1 = “Mot, hai, ba Trung Tam Dao Tao CNTT”; // tạo ký tự khoảng trắng dấu phẩy const char Space = ‘ ‘; const char Comma = ‘,’; // tạo mảng phân cách char[] delimiters = new char[] { Space, Comma }; // sử dụng StringBuilder để tạo chuỗi output StringBuilder output = new StringBuilder(); int ctr = 1; // chia chuỗi dùng vòng lặp để đưa kết vào // mảng chuỗi foreach ( string subString in s1.Split(delimiters) ) { // AppendFormat nối chuỗi định dạng output.AppendFormat(“{0}: {1}\n”, ctr++, subString); }// end foreach Console.WriteLine( output ); } } } Xử Lý Chuỗi 290 Ngôn Ngữ Lập Trình C# Chúng ta thay phần cuối đoạn chương trình 10.3 Rõ ràng việc sử dụng StringBuilder thuận tiện việc sử dụng toán tử bổ sung chuỗi Ở sử dụng phương thức AppendFormat() StringBuilder để nối thêm chuỗi định dạng để tạo chuỗi Điều dễ dàng hiệu Kết chương trình thực tượng tự ví dụ minh họa 10.3 dùng String: 1: Mot 2: 3: hai 4: 5: ba 6: Trung 7: Tam 8: Dao 9: Tao 10: CNTT Các biểu thức quy tắc (Regular Expression) Biểu thức qui tắc ngôn ngữ mạnh dùng để mô tả thao tác văn Một biểu thức qui tắc thường áp dụng cho chuỗi, hay tập hợp ký tự Thông thường chuỗi toàn văn hay tài liệu Kết việc áp dụng biểu thức qui tắc đến chuỗi trả chuỗi trả chuỗi bổ sung từ vài phần chuỗi nguyên thủy ban đầu Chúng ta nên nhớ string thay đổi khơng thể thay đổi biểu thức qui tắc Bằng cách áp dụng xác biểu thức qui tắc cho chuỗi sau: Mot, hai, ba, Trung Tam Dao Tao CNTT trả hay tất danh sách chuỗi (Mot, hai, ) tạo phiên chuỗi bổ sung chuỗi (như : TrUng TAM, ) Biểu thức qui tắc định cú pháp ký tự qui tắc thân Một biểu thức qui tắc bao gồm hai kiểu ký tự: Ký tự bình thường (literal): ký tự mà sử dụng để so khớp với chuỗi ký tự đích Metacharacter: biểu tượng đặc biệt, có hành động lệnh phân tích (parser) biểu thức Bộ phân tích chế có trách nhiệm hiểu biểu thức qui tắc Ví dụ tạo biểu thức qui tắc sau: ^(From|To|Subject|Date): 291 Xử Lý Chuỗi Ngơn Ngữ Lập Trình C# Biểu thức so khớp với chuỗi với từ “From”, “To”, “Subject”, “Date” miễn từ bắt đầu ký tự dòng (^) kết thúc với dấu hai chấm (:) Ký hiệu dấu mũ (^) trường hợp cho phân tích biểu thức qui tắc chuỗi mà muốn tìm kiếm phải dịng Trong biểu thức ký tự “(”,”)”, “|” metacharacter dùng để nhóm chuỗi ký tự bình thường “From”, “To”,”Subject”, “Date” lựa chọn số so khớp Ngồi ký tự “^” ký tự metacharacter bắt đầu dịng Tóm lại với chuỗi biểu thức qui tắc như: ^(From|To|Subject|Date): ta phát biểu theo ngơn ngữ tự nhiên sau: “Phù hợp với chuỗi bắt đầu dòng theo sau bốn chữ From, To, Subject, Date theo sau ký tự dấu hai chấm” Việc trình bày đầy đủ biểu thức quy tắc vượt phạm vi sách này, đa dạng phức tạp Tuy nhiên, phạm vi trình bày chương 10 này, tìm hiểu số thao tác phổ biến hữu dụng biểu thức quy tắc Sử dụng biểu thức quy tắc qua lớp Regex MS.NET cung cấp hướng tiếp cận hướng đối tượng (object- oriented approad) cho biểu thức quy tắc để so khớp, tìm kiếm thay chuỗi Biểu thức quy tắc ngôn ngữ C# xây dựng từ lớp regexp ngôn ngữ Perl5 Namspace System.Text.RegularExpressions thư viện BCL (Base Class Library) chứa đựng tất đối tượng liên quan đến biểu thức quy tắc môi trường NET Và lớp quan trọng mà biểu thức quy tắc hỗ trợ Regex Ta tạo thể lớp Regex sử dụng số phương thức tĩnh ví dụ minh họa 10.5 Ví dụ minh họa 10.5: Sử dụng lớp Regex namespace Programming_CSharp { using System; using System.Text; using System.Text.RegularExpressions; public class Tester { static void Main() { // khởi tạo chuỗi sử dụng string s1 = “Mot, hai, ba, Trung Tam Dao Tao CNTT”; Xử Lý Chuỗi 292 ... NET Và lớp quan trọng mà biểu thức quy tắc hỗ trợ Regex Ta tạo thể lớp Regex sử dụng số phương thức tĩnh ví dụ minh họa 10.5 Ví dụ minh họa 10.5: Sử dụng lớp Regex ... chương trình 10.3 Rõ ràng việc sử dụng StringBuilder thuận tiện việc sử dụng toán tử bổ sung chuỗi Ở sử dụng phương thức AppendFormat() StringBuilder để nối thêm chuỗi định dạng để tạo chuỗi Điều... dấu phẩy dùng làm ký tự phân cách Sau phương thức Split() gọi chuỗi này, truyền kết vào vòng lặp: foreach ( string subString in s1.Split(delimiters) ) Chuỗi output chứa chuỗi kết khởi tạo chuỗi