Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
1,87 MB
Nội dung
Ngôn Ngữ Lập Trình C# // Tham số thứ ba là true sẽ bỏ qua kiểm tra ký tự thường – hoa result = string. Compare(s1, s2, true); Console.WriteLine(“Khong phan biet chu thuong va hoa\n”); Console.WriteLine(“S1: {0} , S2: {1}, ket qua : {2}\n”, s1, s2, result); // phương thức nối các chuỗi string s4 = string.Concat(s1, s2); Console.WriteLine(“Chuoi S4 noi tu chuoi S1 va S2: {0}”, s4); // sử dụng nạp chồng toán tử + string s5 = s1 + s2; Console.WriteLine(“Chuoi S5 duoc noi tu chuoi S1 va S2: {0}”, s5); // Sử dụng phương thức copy chuỗi string s6 = string.Copy(s5); Console.WriteLine(“S6 duoc sao chep tu S5: {0}”, s6); // Sử dụng nạp chồng toán tử = string s7 = s6; Console.WriteLine(“S7 = S6: {0}”, s7); // Sử dụng ba cách so sánh hai chuỗi // Cách 1 sử dụng một chuỗi để so sánh với chuỗi còn lại Console.WriteLine(“S6.Equals(S7) ?: {0}”, s6.Equals(s7)); // Cách 2 dùng hàm của lớp string so sánh hai chuỗi Console.WriteLine(“Equals(S6, s7) ?: {0}”, string.Equals(s6, s7)); // Cách 3 dùng toán tử so sánh Console.WriteLine(“S6 == S7 ?: {0}”, s6 == s7); // Sử dụng hai thuộc tính hay dùng là chỉ mục và chiều dài của chuỗi Console.WriteLine(“\nChuoi S7 co chieu dai la : {0}”, s7.Length); Console.WriteLine(“Ky tu thu 3 cua chuoi S7 la : {0}”, s7[2] ); // Kiểm tra xem một chuỗi có kết thúc với một nhóm ký // tự xác định hay không Console.WriteLine(“S3: {0}\n ket thuc voi chu CNTT ? : {1}\n”, s3, s3.EndsWith(“CNTT”)); Console.WriteLine(“S3: {0}\n ket thuc voi chu Nam ? : {1}\n”, s3, s3.EndsWith(“Nam”)); // Trả về chỉ mục của một chuỗi con Console.WriteLine(“\nTim vi tri xuat hien dau tien cua chu CNTT ”); Console.WriteLine(“trong chuoi S3 là {0}\n”, s3.IndexOf(“CNTT”)); // Chèn từ nhân lực vào trước CNTT trong chuỗi S3 string s8 = s3.Insert(18, “nhan luc ”); Console.WriteLine(“ S8 : {0}\n”, s8); Xử Lý Chuỗi 281 Ngôn Ngữ Lập Trình C# // Ngoài ra ta có thể kết hợp như sau string s9 = s3.Insert( s3.IndexOf( “CNTT” ) , “nhan luc ”); Console.WriteLine(“ S9 : {0}\n”, s9); } // end Main } // end class } // end namespace Kết quả: So sanh hai chuoi S1: abcd và S2: ABCD ket qua: -1 Khong phan biet chu thuong va hoa S1: abcd , S2: ABCD, ket qua : 0 Chuoi S4 noi tu chuoi S1 va S2: abcdABCD Chuoi S5 duoc noi tu chuoi S1 + S2: abcdABCD S6 duoc sao chep tu S5: abcdABCD S7 = S6: abcdABCD S6.Equals(S7) ?: True Equals(S6, s7) ?: True S6 == S7 ?: True Chuoi S7 co chieu dai la : 8 Ky tu thu 3 cua chuoi S7 la : c S3: Trung Tam Dao Tao CNTT Thanh pho Ho Chi Minh Viet Nam ket thuc voi chu CNTT ? : False S3: Trung Tam Dao Tao CNTT Thanh pho Ho Chi Minh Viet Nam ket thuc voi chu Minh ? : True Tim vi tri xuat hien dau tien cua chu CNTT trong chuoi S3 là 18 S8 : Trung Tam Dao Tao nhan luc CNTT Thanh pho Ho Chi Minh Viet Nam S9 : Trung Tam Dao Tao nhan luc CNTT Thanh pho Ho Chi Minh Viet Nam Như chúng ta đã xem đoạn chương trình minh họa trên, chương trình bắt đầu với ba khai báo chuỗi: string s1 = “abcd”; string s2 = “ABCD”; Xử Lý Chuỗi 282 Ngôn Ngữ Lập Trình C# string s3 = @“Trung Tam Dao Tao CNTT Thanh pho Ho Chi Minh Viet Nam”; Hai chuỗi đầu s1 và s2 được khai báo chuỗi ký tự bình thường, còn chuỗi thứ ba được khai báo là chuỗi nguyên văn (verbatim string) bằng cách sử dụng ký hiệu @ trước chuỗi. Chương trình bắt đầu bằng việc so sánh hai chuỗi s1 và s2. Phương thức Compare() là phương thức tĩnh của lớp string, và phương thức này đã được nạp chồng. Phiên bản đầu tiên của phương thức nạp chồng này là lấy hai chuỗi và so sánh chúng với nhau: // So sánh hai chuỗi với nhau có phân biệt chữ thường và chữ hoa result = string.Compare( s1 ,s2); Console.WriteLine(“So sanh hai chuoi s1: {0} và s2: {1} ket qua: {2} \n”, s1 ,s2 ,result); Ở đây việc so sánh có phân biệt chữ thường và chữ hoa, phương thức trả về các giá trị khác nhau phụ thuộc vào kết quả so sánh: Một số âm nếu chuỗi đầu tiên nhỏ hơn chuỗi thứ hai Giá trị 0 nếu hai chuỗi bằng nhau Một số dương nếu chuỗi thứ nhất lớn hơn chuỗi thứ hai. Trong trường hợp so sánh trên thì đưa ra kết quả là chuỗi s1 nhỏ hơn chuỗi s2. Trong Unicode cũng như ASCII thì thứ tự của ký tự thường nhỏ hơn thứ tự của ký tự hoa: So sanh hai chuoi S1: abcd và S2: ABCD ket qua: -1 Cách so sánh thứ hai dùng phiên bản nạp chồng Compare() lấy ba tham số. Tham số Boolean quyết định bỏ qua hay không bỏ qua việc so sánh phân biệt chữ thường và chữ hoa. Tham số này có thể bỏ qua. Nếu giá trị của tham số là true thì việc so sánh sẽ bỏ qua sự phân biệt chữ thường và chữ hoa. Việc so sánh sau sẽ không quan tâm đến kiểu loại chữ: // Tham số thứ ba là true sẽ bỏ qua kiểm tra ký tự thường – hoa result = string. Compare(s1, s2, true); Console.WriteLine(“Khong phan biet chu thuong va hoa\n”); Console.WriteLine(“S1: {0} , S2: {1}, ket qua : {2}\n”, s1, s2, result); Lúc này thì việc so sánh hoàn toàn giống nhau và kết quả trả về là giá trị 0: Khong phan biet chu thuong va hoa S1: abcd , S2: ABCD, ket qua : 0 Ví dụ minh họa 10.1 trên tiếp tục với việc nối các chuỗi lại với nhau. Ở đây sử dụng hai cách để nối liền hai chuỗi. Chúng ta có thể sử dụng phương thức Concat() đây là phương thức public static của string: string s4 = string.Concat(s1, s2); Hay cách khác đơn giản hơn là việc sử dụng toán tử nối hai chuỗi (+): string s5 = s1 + s2; Trong cả hai trường hợp thì kết quả nối hai chuỗi hoàn toàn thành công và như sau: Xử Lý Chuỗi 283 Ngôn Ngữ Lập Trình C# Chuoi S4 noi tu chuoi S1 va S2: abcdABCD Chuoi S5 duoc noi tu chuoi S1 + S2: abcdABCD Tương tự như vậy, việc tạo một chuỗi mới có thể được thiết lập bằng hai cách. Đầu tiên là chúng ta có thể sử dụng phương thức static Copy() như sau: string s6 = string.Copy(s5); Hoặc thuận tiện hơn chúng ta có thể sử dụng phương thức nạp chồng toán tử (=) thông qua việc sao chép ngầm định: string s7 = s6; Kết quả của hai cách tạo trên đều hoàn toàn như nhau: S6 duoc sao chep tu S5: abcdABCD S7 = S6: abcdABCD Lớp String của .NET cung cấp ba cách để kiểm tra bằng nhau giữa hai chuỗi. Đầu tiên là chúng ta có thể sử dụng phương thức nạp chồng Equals() để kiểm tra trực tiếp rằng S6 có bằng S7 hay không: Console.WriteLine(“S6.Equals(S7) ?: {0}”, S6.Equals(S7)); Kỹ thuật so sánh thứ hai là truyền cả hai chuỗi vào phương thức Equals() của string: Console.WriteLine(“Equals(S6, s7) ?: {0}”, string.Equals(S6, S7)); Và phương pháp cuối cùng là sử dụng nạp chồng toán tử so sánh (=) của String: Console.WriteLine(“S6 == S7 ?: {0}”, s6 == s7); Trong cả ba trường hợp thì kết quả trả về là một giá trị Boolean, ta có kết quả như sau: S6.Equals(S7) ?: True Equals(S6, s7) ?: True S6 == S7 ?: True Việc so sánh bằng nhau giữa hai chuỗi là việc rất tự nhiên và thường được sử dụng. Tuy nhiên, trong một số ngôn ngữ, như VB.NET, không hỗ trợ nạp chồng toán tử. Do đó để chắc chắn chúng ta nên sử dụng phương thức Equals() là tốt nhất. Các đoạn chương trình tiếp theo của ví dụ 10.1 sử dụng toán tử chỉ mục ([]) để tìm ra ký tự xác định trong một chuỗi. Và dùng thuộc tính Length để lấy về chiều dài của toàn bộ một chuỗi: Console.WriteLine(“\nChuoi S7 co chieu dai la : {0}”, s7.Length); Console.WriteLine(“Ky tu thu 3 cua chuoi S7 la : {0}”, s7[2] ); Kết quả là: Chuoi S7 co chieu dai la : 8 Ky tu thu 3 cua chuoi S7 la : c Phương thức EndsWith() hỏi xem một chuỗi có chứa một chuỗi con ở vị trí cuối cùng hay không. Do vậy, chúng ta có thể hỏi rằng chuỗi S3 có kết thúc bằng chuỗi “CNTT” hay chuỗi “Nam”: // Kiểm tra xem một chuỗi có kết thúc với một nhóm ký tự xác định hay không Xử Lý Chuỗi 284 Ngôn Ngữ Lập Trình C# Console.WriteLine(“S3: {0}\n ket thuc voi chu CNTT ? : {1}\n”, s3, s3.EndsWith(“CNTT”)); Console.WriteLine(“S3: {0}\n ket thuc voi chu Nam ? : {1}\n”, s3, s3.EndsWith(“Nam”)); Kết quả trả về là lần kiểm tra đầu tiên là sai do chuỗi S3 không kết thúc chữ “CNTT”, và lần kiểm tra thứ hai là đúng: S3: Trung Tam Dao Tao CNTT Thanh pho Ho Chi Minh Viet Nam ket thuc voi chu CNTT ? : False S3: Trung Tam Dao Tao CNTT Thanh pho Ho Chi Minh Viet Nam ket thuc voi chu Minh ? : True Phương thức IndexOf() chỉ ra vị trí của một con bên trong một chuỗi (nếu có). Và phương thức Insert() chèn một chuỗi con mới vào một bản sao chép của chuỗi ban đầu. Đoạn lệnh tiếp theo của ví dụ minh họa thực hiện việc xác định vị trí xuất hiện đầu tiên của chuỗi “CNTT” trong chuỗi S3: Console.WriteLine(“\nTim vi tri xuat hien dau tien cua chu CNTT ”); Console.WriteLine(“trong chuoi S3 là {0}\n”, s3.IndexOf(“CNTT”)); Và kết quả tìm được là 18: Tim vi tri xuat hien dau tien cua chu CNTT trong chuoi S3 là 18 Chúng ta có thể chèn vào chuỗi từ “nhan luc” và theo sau chuỗi này là một khoảng trắng vào trong chuỗi ban đầu. Khi thực hiện thì phương thức trả về bản sao của chuỗi đã được chèn vào chuỗi con mới và được gán lại vào chuỗi S8: string s8 = s3.Insert(18, “nhan luc ”); Console.WriteLine(“ S8 : {0}\n”, s8); Kết quả đưa ra là: S8 : Trung Tam Dao Tao nhan luc CNTT Thanh pho Ho Chi Minh Viet Nam Cuối cùng, chúng ta có thể kết hợp một số các phép toán để thực hiện việc chèn như sau: string s9 = s3.Insert( s3.IndexOf( “CNTT” ) , “nhan luc ”); Console.WriteLine(“ S9 : {0}\n”, s9); Kết quả cuối cùng cũng tương tự như cách chèn bên trên: S9 : Trung Tam Dao Tao nhan luc CNTT Thanh pho Ho Chi Minh Viet Nam Tìm một chuỗi con Xử Lý Chuỗi 285 Ngôn Ngữ Lập Trình C# Trong kiểu dữ liệu String có cung cấp phương thức Substring() để trích một chuỗi con từ chuỗi ban đầu. Cả hai phiên bản đều dùng một chỉ mục để xác định vị trí bắt đầu trích ra. Và một trong hai phiên bản dùng chỉ mục thứ hai làm vị trí kết thúc của chuỗi. Trong ví dụ 10.2 minh họa việc sử dụng phương thức Substring() của chuỗi. Ví dụ 10.2 : Sử dụng phương thức Substring(). namespace Programming_CSharp { using System; using System.Text; public class StringTester { static void Main() { // Khai báo các chuỗi để sử dụng string s1 = “Mot hai ba bon”; int ix; // lấy chỉ số của khoảng trắng cuối cùng ix = s1.LastIndexOf(“ ”); // lấy từ cuối cùng string s2 = s1.Substring( ix+1); // thiết lập lại chuỗi s1 từ vị trí 0 đến vị trí ix // do đó s1 có giá trị mới là mot hai ba s1 = s1.Substring(0, ix); // tìm chỉ số của khoảng trắng cuối cùng (sau hai) ix = s1.LastIndexOf(“ ”); // thiết lập s3 là chuỗi con bắt đầu từ vị trí ix // do đó s3 = “ba” string s3 = s1.Substring(ix+1); // thiết lập lại s1 bắt đầu từ vị trí 0 đến cuối vị trí ix // s1 = “mot hai” s1 = s1.Substring(0, ix); // ix chỉ đến khoảng trắng giữa “mot” va “hai” ix = s1.LastIndexOf(“ ”); // tạo ra s4 là chuỗi con bắt đầu từ sau vị trí ix, do // vậy có giá trị là “hai” string s4 = s1.Substring( ix+1); // thiết lập lại giá trị của s1 Xử Lý Chuỗi 286 Ngôn Ngữ Lập Trình C# s1 = s1.Substring(0, ix); // lấy chỉ số của khoảng trắng cuối cùng, lúc này ix là –1 ix = s1.LastIndexOf(“ ”); // tạo ra chuỗi s5 bắt đầu từ chỉ số khoảng trắng, nhưng không có khoảng // trắng và ix là –1 nên chuỗi bắt đầu từ 0 string s5 = s1.Substring(ix +1); Console.WriteLine(“s2 : {0}\n s3 : {1}”, s2, s3); Console.WriteLine(“s4 : {0}\n s5 : {1}\n”, s4, s5); Console.WriteLine(“s1: {0}\n”, s1); }// end Main }// end class }// end namespace Kết quả: s2 : bon s3 : ba s4 : hai s5 : mot s1 : mot Ví dụ minh họa 10.2 trên không phải là giải pháp tốt để giải quyết vấn đề trích lấy các ký tự trong một chuỗi. Nhưng nó là cách gần đúng tốt nhất và minh họa hữu dụng cho kỹ thuật này. Chia chuỗi Một giải pháp giải quyết hiệu quả hơn để minh họa cho ví dụ 10.2 là có thể sử dụng phương thức Split() của lớp string. Chức năng chính là phân tích một chuỗi ra thành các chuỗi con. Để sử dụng Split(), chúng ta truyền vào một mảng các ký tự phân cách, các ký tự này được dùng để chia các từ trong chuỗi. Và phương thức sẽ trả về một mảng những chuỗi con. Ví dụ 10.3 : Sử dụng phương thức Split(). namespace Programming_CSharp { using System; using System.Text; public class StringTester { static void Main() Xử Lý Chuỗi 287 Ngôn Ngữ Lập Trình C# { // tạo các chuỗi để làm việc string s1 = “Mot, hai, ba Trung Tam Dao Tao CNTT”; // tạo ra hằng ký tự khoảng trắng và dấu phẩy const char Space = ‘ ‘; const char Comma = ‘,’; // tạo ra mảng phân cách char[] delimiters = new char[] { Space, Comma }; string output = “”; int ctr = 1; // thực hiện việc chia một chuỗi dùng vòng lặp // đưa kết quả vào mảng các 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 bằng việc tạo một 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 và dấu phẩy được dùng làm các ký tự phân cách. Sau đó phương thức Split() được gọi trong chuỗi này, và truyền kết quả vào mỗi vòng lặp: foreach ( string subString in s1.Split(delimiters) ) Chuỗi output chứa các chuỗi kết quả được khởi tạo là chuỗi rỗng. Ở đây chúng ta tạo ra chuỗi output bằng bốn bước. Đầu tiên là nối giá trị của biến đếm ctr, tiếp theo là thêm dấu hai chấm, rồi đưa chuỗi được chia ra từ chuỗi ban đầu, và cuối cùng là thêm ký tự qua dòng mới. Và bốn bước trên cứ được lặp đến khi nào chuỗi không còn chia ra được. Có một vấn đề cần nói là kiểu dữ liệu string không được thiết kế cho việc thêm vào một chuỗi định dạng sẵn để tạo ra một chuỗi mới trong mỗi vòng lặp trên, nên chúng ta mới phải thêm vào từng ký tự như vậy. Một lớp StringBuilder được tạo ra để phục vụ cho nhu cầu thao tác chuỗi tốt hơn. Thao tác trên chuỗi dùng StringBuilder Lớp StringBuilder được sử dụng để tạo ra và bổ sung các chuỗi. Hay có thể nói lớp này chính là phần đóng gói của một bộ khởi dựng cho một String. Một số thành viên quan trọng StringBuilder được tóm tắt trong bảng 10.2 như sau: System.StringBuilder Phương thức Ý nghĩa Capacity() Truy cập hay gán một số ký tự mà StringBuilder nắm giữ. Chars() Chỉ mục. Length() Thiết lập hay truy cập chiều dài của chuỗi MaxCapacity() Truy cập dung lượng lớn nhất của StringBuilder Append() Nối một kiểu đối tượng vào cuối của StringBuilder AppendFormat() Thay thế định dạng xác định bằng giá trị được định dạng của một đối tượng. EnsureCapacity() Đảm bảo rằng StringBuilder hiện thời có khả năng tối thiểu lớn như một giá trị xác định. Insert() Chèn một đối tượng vào một vị trí xác định Replace() Thay thế tất cả thể hiện của một ký tự xác định với những ký tự mới. Bảng 10.2 Phương thức của lớp StringBuilder Xử Lý Chuỗi 289 Ngôn Ngữ Lập Trình C# Không giống như String, StringBuilder thì dễ thay đổi. Khi chúng ta bổ sung một đối tượng StringBuilder thì chúng ta đã làm thay đổi trên giá trị thật của chuỗi, chứ không phải trên bản sao. Ví dụ minh họa 10.4 thay thế đối tượng String bằng một đố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 ra hằng ký tự khoảng trắng và dấu phẩy const char Space = ‘ ‘; const char Comma = ‘,’; // tạo ra 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 và dùng vòng lặp để đưa kết quả vào // mảng các chuỗi foreach ( string subString in s1.Split(delimiters) ) { // AppendFormat nối một chuỗi được định dạng output.AppendFormat(“{0}: {1}\n”, ctr++, subString); }// end foreach Console.WriteLine( output ); } } } Xử Lý Chuỗi 290 [...]... Viết chương trình tìm số lần xuất hiện một chuỗi con trong một chuỗi cho trước Chương trình cho phép người dùng nhập vào một chuỗi và chuỗi con cần đếm Kết quả hiển thị chuỗi, chuỗi con và các vị trí mà chuỗi con xuất hiện trong chuỗi Bài tập 4: Viết chương trình cho phép người dùng nhập vào một chuỗi, rồi thực hiện việc đảo các ký tự trong chuỗi theo thứ tự ngược lại Bài tập 5: Viết chương trình cắt các. ..Ngôn Ngữ Lập Trình C# Chúng ta chỉ thay phần cuối của đoạn chương trình 10.3 Rõ ràng việc sử dụng StringBuilder thuận tiện hơn là việc sử dụng các toán tử bổ sung trong chuỗi Ở đây chúng ta sử dụng phương thức AppendFormat() của StringBuilder để nối thêm một chuỗi được định dạng để tạo ra một chuỗi mới Điều này quá dễ dàng và khá là hiệu quả Kết quả chương trình thực... các đối mục cần thiết Lưu ý: Từ phần này về sau chúng ta quy ước có thể sử dụng qua lại giữa hai từ uỷ quyền và delegate với nhau Sử dụng ủy quyền để xác nhận phương thức lúc thực thi Ủ y quyền như chúng ta đã biết là được dùng để xác định những loại phương thức có thể được dùng để xử lý các sự kiện và để thực hiện callback trong chương trình ứng dụng Chúng 305 Cơ Chế Ủy Quyền - Sự Kiện Ngôn Ngữ Lập. .. đến phương thức cụ thể khi thực thi chương trình Trong thời kỳ đầu của máy tính, chương trình được thực hiện theo trình tự xử lý từng bước tuần tự cho đến khi hoàn thành, và nếu người dùng thực hiện một sự tương tác thì sẽ làm hạn chế sự điều khiển hoạt động khác của chương trình cho đến khi sự tương tác với người dùng chấm dứt Tuy nhiên, ngày nay với mô hình lập trình giao diện người dùng đồ họa (GUI:... nào? 302 Xử Lý Chuỗi Ngôn Ngữ Lập Trình C# Trả lời 3: Như nó bên trên, thao tác thường xuyên thực hiện trên một chuỗi là tìm kiếm chuỗi con thỏa quy tắc nào đó Một ngôn ngữ nếu mạnh về thao tác trên chuỗi, chắc chắn phải cung cấp nhiều phương thức thao tác tốt để tìm kiếm các chuỗi con theo quy tắc Ngôn ngữ C# cũng rất mạnh về điểm này, do chúng thừa hưởng từ các lớp thao tác trên chuỗi của NET Câu hỏi... quy tắc vừa tạo để thực hiện việc tìm kiếm 303 Xử Lý Chuỗi Ngôn Ngữ Lập Trình C# Chương 11 CƠ CHẾ ỦY QUYỀN - SỰ KIỆN Ủ y quyền Ủ y quyền tĩnh Dùng ủy quyền như thuộc tính Thiết lập thứ tự thi hành với mảng ủy quyền Sử dụng ủy quyền để xác nhận phương thức lúc thực thi Muticasting Sự kiện Cơ chế publishing – subscribing Sự kiện & ủy quyền Câu hỏi & bài tập Trong lập trình chúng ta... mới là đối tượng biểu thức quy tắc! 293 Xử Lý Chuỗi Ngôn Ngữ Lập Trình C# Phần còn lại của chương trình thực hiện giống như ví dụ minh họa 10.4 trước Ngoại trừ việc gọi phương thức Split() của đối tượng Regex chứ không phải của chuỗi s1 Regex.Split() hành động cũng tương tự như cách String.Split() Kết quả trả về là mảng các chuỗi, đây chính là các chuỗi con so khớp tìm được theo mẫu đưa ra trong theRegex... cách tiếp cận khác, và được biết như là lập trình điều khiển sự kiện (event-driven programming) Chương trình hiện đại này đưa ra một giao diện tương tác với người dùng và sau đó thì chờ cho người sử dụng kích hoạt một hành động nào đó Người sử dụng có thể thực hiện nhiều hành động khác nhau như: chọn các mục chọn trong menu, nhấn một nút lệnh, cập nhật các ô chứa văn bản, Mỗi hành động như vậy sẽ dẫn. .. “hanh”, “lap”, “trinh” Bài tập 6: Hãy viết chương trình sử dụng biểu thức quy tắc để lấy ra chuỗi ngày/tháng/năm trong một chuỗi cho trước? Cho phép người dùng nhập vào một chuỗi rồi dùng biểu thức quy tắc vừa tạo ra thực hiện việc tìm kiếm Bài tập 7: Hãy viết chương trình sử dụng biểu thức quy tắc để lấy ra thời gian giờ:phút:giây trong một chuỗi cho trước? Chương trình cho phép người dùng nhập vào một... liệu thường được sử dụng nhất trong lập trình Trong ngôn ngữ C#, chuỗi được hỗ trợ rất mạnh thông qua các lóp về chuỗi và biểu thức quy tắc Chuỗi là kiểu dữ liệu tham chiếu, chứa các ký tự Unicode Các thao tác trên đối tượng chuỗi không làm thay đổi giá trị của chuỗi mà ta chỉ nhận được kết quả trả về Tuy nhiên, C# cung cấp lớp StringBuilder cho phép thao tác trực tiếp để bổ sung chuỗi Câu hỏi 2: Biểu . 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 bằng việc tạo một chuỗi để minh họa việc phân tích: string s1 =. nhân lực vào trước CNTT trong chuỗi S3 string s8 = s3.Insert( 18, “nhan luc ”); Console.WriteLine(“ S8 : {0}
”, s8); Xử Lý Chuỗi 281 Ngôn Ngữ Lập Trình C# // Ngoài ra ta có thể kết hợp như sau string. chèn vào chuỗi con mới và được gán lại vào chuỗi S8: string s8 = s3.Insert( 18, “nhan luc ”); Console.WriteLine(“ S8 : {0}
”, s8); Kết quả đưa ra là: S8 : Trung Tam Dao Tao nhan luc CNTT Thanh pho