Tài liệu XỬ LÝ CHUỖI phần 1 pdf

12 437 0
Tài liệu XỬ LÝ CHUỖI phần 1 pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

XỬ LÝ CHUỖI · Lớp đối tượng string · Tạo chuỗi · Tạo chuỗi dùng phương thức ToString · Thao tác chuỗi · Tìm chuỗi · Chia chuỗi · Thao tác chuỗi dùng StringBuilder · Các biểu thức quy tắc · · Sử dụng biểu thức quy tắc qua lớp Regex · Sử dụng Regex để tìm tập hợp · Sử dụng Regex để gom nhóm · Sử dụng lớp CaptureCollection Câu hỏi & tập Có thời gian người ta ln nghĩ máy tính dành riêng cho việc thao tác giá trị dạng số Các máy tính thiết kế để sử dụng tính tốn số lượng lớn tính tốn quỹ đạo tên lửa quốc phịng Và ngơn ngữ lập trình giảng dạy khoa toán đại học lớn Ngày nay, hầu hết chương trình liên quan đến nhiều chuỗi ký tự chuỗi số Thông thường chuỗi sử dụng cho việc xử lý từ ngữ, thao tác sưu liệu, tạo trang web Ngôn ngữ C# hỗ trợ đầy đủ chức kiểu chuỗi mà thấy ngơn ngữ lập trình cấp cao khác Điều quan trọng ngơn ngữ C# xem chuỗi đối tượng đóng gói tất thao tác, xếp, phương thức tìm kiếm thường áp dụng cho chuỗi ký tự Những thao tác chuỗi phức tạp so khớp mẫu hỗ trợ việc sử dụng biểu thức quy tắc (regular expression) Ngôn ngữ C# kết hợp sức mạnh phức tạp cú pháp biểu thức quy tắc, (thông thường tìm thấy ngơn ngữ thao tác chuỗi Awk, Perl), với thiết kế hướng đối tượng đầy đủ Trong chương 10 học cách làm việc với kiểu liệu string ngôn ngữ C#, kiểu string alias lớp System.String NET Framework Chúng ta thấy cách rút trích chuỗi con, thao tác nối chuỗi, xây dựng chuỗi với lớp StringBuilder Thêm vào đó, học cách sử dụng lớp Regex để so khớp chuỗi dựa biểu thức quy tắc phức tạp Lớp đối tượng String C# xem chuỗi kiểu liệu tức lớp linh hoạt, mạnh mẽ, dễ sử dụng Mỗi đối tượng chuỗi dãy cố định ký tự Unicode Nói cách khác, phương thức dùng để làm thay đổi chuỗi thực trả thay đổi, chuỗi nguyên thủy không thay đổi Khi khai báo chuỗi C# cách dùng từ khóa string, khai báo đối tượng lớp System.String, kiểu liệu xây dựng sẵn cung cấp thư viện lớp NET (.NET Framework Class Library) Do kiểu liệu chuỗi C# kiểu liệu System.String, suốt chương dùng hai tên hoán đổi lẫn Khai báo lớp System.String sau: public sealed class String : IComparable, ICloneble, IConvertible Khai báo cho thấy lớp String đóng dấu khơng cho phép kế thừa, khơng thể dẫn xuất từ lớp Lớp thực thi ba giao diện hệ thống IComparable, ICloneable, IConvertible – giao diện cho phép lớp System.String chuyển đổi với lớp khác hệ thống NET Như xem chương 9, giao diện IComparable thực thi kiểu liệu xếp Ví dụ chuỗi theo cách xếp Alphabe Bất chuỗi đưa so sánh với chuỗi khác để chuỗi có thứ tự trước Những lớp IComparable thực thi phương thức CompareTo() Những đối tượng ICloneable tạo thể khác với giá trị thể nguyên thuỷ Do ta tạo chuỗi từ chuỗi ban đầu giá trị chuỗi với chuỗi ban đầu Những lớp ICloneable thực thi phương thức Clone() Những lớp IConvertible cung cấp phương thức để dễ dàng chuyển đổi qua kiểu liệu khác ToInt32(), ToDouble(), ToDecimal(), Tạo chuỗi Cách phổ biến để tạo chuỗi gán cho chuỗi trích dẫn tức chuỗi nằm dấu ngoặc kép, kiểu chuỗi biết chuỗi hằng, khai báo sau: string newString = “Day la chuoi hang”; Những chuỗi trích dẫn thêm ký tự escape, “\n” hay “\t”, ký tự bắt đầu với dầu chéo ngược (“\”), ký tự dùng để vị trí xuống dịng hay tab xuất Bởi dấu gạch chéo ngược dùng vài cú pháp dòng lệnh, địa URLs hay đường dẫn thư mục, chuỗi trích dẫn dấu chéo ngược phải đặt trước dấu chéo ngược khác, tức dùng hai dấu chéo ngược trường hợp Chuỗi tạo cách sử dụng chuỗi cố định hay nguyên văn (verbatim), tức ký tự chuỗi giữ nguyên không thay đổi Chuỗi bắt đầu với biểu tượng @ Biểu tượng bảo với hàm khởi dựng lớp String chuỗi theo sau nguyên văn, chí chứa nhiều dịng bao gồm ký tự escape Trong chuỗi nguyên văn, ký tự chéo ngược ký tự sau đơn giản ký tự thêm vào chuỗi Do vậy, ta có định nghĩa chuỗi sau tương đương với nhau: string literal1 = “\\\\MyDocs\\CSharp\\ProgrammingC#.cs”; string verbatim1 = @”\\MyDocs\CSharp\ProgrammingC#.cs”; Trong chuỗi thứ nhất, chuỗi bình thường sử dụng, dấu ký tự chéo ký tự escape, nên phải đặt trước ký tự chéo ngược thứ hai Trong khai báo thứ hai chuỗi nguyên văn sử dụng, nên không cần phải thêm ký tự chéo ngược Một ví dụ thứ hai minh họa việc dùng chuỗi nguyên văn: string literal2 = “Dong mot \n dong hai”; string verbatim2 = @”Dong mot dong hai”; Nói chung ta ta sử dụng qua lại hai cách định nghĩa Việc lựa chọn phụ thuộc vào thuận tiện trường hợp hay phong cách riêng người Tạo chuỗi dùng phương thức ToString đối tượng Một cách phổ biến khác để tạo chuỗi gọi phương thức ToString() đối tượng gán kết đến biến chuỗi Tất kiểu liệu phủ phương thức đơn giản chuyển đổi giá trị (thông thường giá trị số) đến chuỗi thể giá trị Trong ví dụ theo sau, phương thức ToString() kiểu liệu int gọi để lưu trữ giá trị chuỗi: int myInt = “9”; string intString = myInt.ToString(); Phương thức myInt.ToString() trả đối tượng String đối tượng gán cho intString Lớp String NET cung cấp nhiều khởi dựng hỗ trợ nhiều kỹ thuật khác để gán giá trị chuỗi đến kiểu liệu chuỗi Một vài khởi dựng cho phép tạo chuỗi cách truyền vào mảng ký tự trỏ ký tự Truyền mảng chuỗi tham số đến khởi dựng String tạo thể CLR- compliant (một thể theo yêu cầu CLR) Còn việc truyền trỏ chuỗi tham số khởi dựng String việc tạo thể không an toàn (unsafe) Thao tác chuỗi Lớp string cung cấp nhiều số lượng phương thức để so sánh, tìm kiếm thao tác chuỗi, phương thức trình bày bảng 10.1: System.String Phương thức/ Trường Ý nghĩa Trường public static thể chuỗi rỗng Empty Phương thức public static để so sánh hai chuỗi Compare() Phương thức public static để so sánh hai chuỗi không CompareOrdinal() quan tâm đến thứ tự Phương thức public static để tạo chuỗi từ hay Concat() nhiều chuỗi Phương thức public static tạo chuỗi Copy() từ chuỗi khác Phương thức public static kiểm tra xem hai chuỗi có Equal() giá trị hay không Phương thức public static định dạng chuỗi dùng Format() ký tự lệnh định dạng xác định Phương thức public static trả tham chiếu đến thể Intern() chuỗi Phương thức public static trả tham chiếu chuỗi IsInterned() Phương thức public static kết nối chuỗi xác định Join() thành phần mảng chuỗi Indexer chuỗi Chars() Chiều dài chuỗi Length() Trả chuỗi Clone() So sánh hai chuỗi CompareTo() CopyTo() Sao chép số ký tự xác định đến mảng ký tự Unicode EndsWidth() Chỉ vị trí chuỗi xác định phù hợp với chuỗi đưa Insert() LastIndexOf() Trả chuỗi chèn chuỗi xác định PadLeft() Canh lề phải ký tự chuỗi, chèn vào bên trái khoảng trắng hay ký tự xác định PadRight() Canh lề trái ký tự chuỗi, chèn vào bên phải khoảng trắng hay ký tự xác định Chỉ vị trí xuất cuối chuỗi xác định chuỗi Xóa số ký tự xác định Remove() Split() Trả chuỗi phân định ký tự xác định chuỗi StartWidth() Xem chuỗi có bắt đầu số ký tự xác định hay không SubString() ToCharArray() ToLower() ToUpper() Trim() Lấy chuỗi Sao chép ký tự từ chuỗi đến mảng ký tự Trả chuỗi kiểu chữ thường Trả chuỗi kiểu chữ hoa Xóa bỏ tất xuất tập hợp ký tự xác định từ vị trí đến vị trí cuối chuỗi Xóa vị trí cuối Xóa Trim vị trí đầu TrimEnd() TrimStart() Bảng 10.1 : Phương thức thuộc tính lớp String Trong ví dụ 10.1 sau minh họa việc sử dụng số phương thức chuỗi Compare(), Concat() (và dùng toán tử +), Copy() (và dùng toán tử =), Insert(), EndsWith(), mục IndexOf Ví dụ 10.1 : Làm việc với chuỗi namespace Programming_CSharp { using System; public class StringTester { static void Main() { // khởi tạo số chuỗi để thao tác string s1 = “abcd”; string s2 = “ABCD”; string s3 = @“Trung Tam Dao Tao CNTT Thanh Ho Chi Minh Viet Nam”; int result; // So sánh hai chuỗi với có phân biệt chữ thường chữ hoa result = string.Compare( s1 ,s2); Console.WriteLine(“So sanh hai chuoi S1: {0} S2: {1} ket qua: {2} \n”, s1 ,s2 ,result); // Sử dụng tiếp phương thức Compare() trường hợp không biệt // chữ thường hay chữ hoa // Tham số thứ ba true 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 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 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 sử dụng chuỗi để so sánh với chuỗi lại Console.WriteLine(“S6.Equals(S7) ?: {0}”, s6.Equals(s7)); // Cách dùng hàm lớp string so sánh hai chuỗi Console.WriteLine(“Equals(S6, s7) ?: {0}”, string.Equals(s6, s7)); // Cách 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 mục chiều dài chuỗi Console.WriteLine(“\nChuoi S7 co chieu dai la : {0}”, s7.Length); Console.WriteLine(“Ky tu thu cua chuoi S7 la : {0}”, s7[2] ); // Kiểm tra xem chuỗi có kết thúc với 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ả mục chuỗi Console.WriteLine(“\nTim vi tri xuat hien dau tien cua chu CNTT ”); Console.WriteLine(“trong chuoi S3 {0}\n”, s3.IndexOf(“CNTT”)); // Chèn từ nhân lực vào trước CNTT chuỗi S3 string s8 = s3.Insert(18, “nhan luc ”); Console.WriteLine(“ S8 : {0}\n”, s8); // Ngồi ta kết hợp 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 S2: ABCD ket qua: -1 Khong phan biet chu thuong va hoa S1: abcd , S2: ABCD, ket qua : Chuoi S4 noi tu chuoi S1 va S2: abcdABCD Chuoi S5 duoc noi tu chuoi S1 + S2: abcdABCD S6 duoc chep tu S5: abcdABCD S7 = S6: abcdABCD S6.Equals(S7) ?: True Equals(S6, s7) ?: True S6 == S7 ?: True Chuoi S7 co chieu dai la : Ky tu thu cua chuoi S7 la : c S3: Trung Tam Dao Tao CNTT Thanh Ho Chi Minh Viet Nam ket thuc voi chu CNTT ? : False S3: Trung Tam Dao Tao CNTT Thanh Ho Chi Minh Viet Nam ket thuc voi chu Minh ? : True Tim vi tri xuat hien dau tien cua chu CNTT chuoi S3 18 S8 : Trung Tam Dao Tao nhan luc CNTT Thanh Ho Chi Minh Viet Nam S9 : Trung Tam Dao Tao nhan luc CNTT Thanh Ho Chi Minh Viet Nam - Như 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”; string s3 = @“Trung Tam Dao Tao CNTT Thanh Ho Chi Minh Viet Nam”; Hai chuỗi đầu s1 s2 khai báo chuỗi ký tự bình thường, chuỗi thứ ba khai báo chuỗi nguyên văn (verbatim string) cách sử dụng ký hiệu @ trước chuỗi Chương trình bắt đầu việc so sánh hai chuỗi s1 s2 Phương thức Compare() phương thức tĩnh lớp string, phương thức nạp chồng Phiên phương thức nạp chồng lấy hai chuỗi so sánh chúng với nhau: // So sánh hai chuỗi với có phân biệt chữ thường chữ hoa result = string.Compare( s1 ,s2); Console.WriteLine(“So sanh hai chuoi s1: {0} s2: {1} ket qua: {2} \n”, s1 ,s2 ,result); Ở việc so sánh có phân biệt chữ thường chữ hoa, phương thức trả giá trị khác phụ thuộc vào kết so sánh: Một số âm chuỗi nhỏ chuỗi thứ hai Giá trị hai chuỗi Một số dương chuỗi thứ lớn chuỗi thứ hai Trong trường hợp so sánh đưa kết chuỗi s1 nhỏ chuỗi s2 Trong Unicode ASCII thứ tự ký tự thường nhỏ thứ tự ký tự hoa: So sanh hai chuoi S1: abcd S2: ABCD ket qua: -1 Cách so sánh thứ hai dùng phiên nạp chồng Compare() lấy ba tham số Tham số Boolean định bỏ qua hay không bỏ qua việc so sánh phân biệt chữ thường chữ hoa Tham số bỏ qua Nếu giá trị tham số true việc so sánh bỏ qua phân biệt chữ thường chữ hoa Việc so sánh sau không quan tâm đến kiểu loại chữ: // Tham số thứ ba true 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 việc so sánh hồn tồn giống kết trả giá trị 0: Khong phan biet chu thuong va hoa S1: abcd , S2: ABCD, ket qua : Ví dụ minh họa 10.1 tiếp tục với việc nối chuỗi lại với Ở sử dụng hai cách để nối liền hai chuỗi Chúng ta sử dụng phương thức Concat() phương thức public static string: string s4 = string.Concat(s1, s2); Hay cách khác đơn giản việc sử dụng toán tử nối hai chuỗi (+): string s5 = s1 + s2; Trong hai trường hợp kết nối hai chuỗi hồn tồn thành công sau: Chuoi S4 noi tu chuoi S1 va S2: abcdABCD Chuoi S5 duoc noi tu chuoi S1 + S2: abcdABCD Tương tự vậy, việc tạo chuỗi thiết lập hai cách Đầu tiên sử dụng phương thức static Copy() sau: string s6 = string.Copy(s5); Hoặc thuận tiện sử dụng phương thức nạp chồng tốn tử (=) thơng qua việc chép ngầm định: string s7 = s6; Kết hai cách tạo hoàn toàn nhau: S6 duoc chep tu S5: abcdABCD S7 = S6: abcdABCD Lớp String NET cung cấp ba cách để kiểm tra hai chuỗi Đầu tiên sử dụng phương thức nạp chồng Equals() để kiểm tra trực tiếp S6 có S7 hay không: Console.WriteLine(“S6.Equals(S7) ?: {0}”, S6.Equals(S7)); Kỹ thuật so sánh thứ hai truyền hai chuỗi vào phương thức Equals() string: Console.WriteLine(“Equals(S6, s7) ?: {0}”, string.Equals(S6, S7)); Và phương pháp cuối sử dụng nạp chồng toán tử so sánh (=) String: Console.WriteLine(“S6 == S7 ?: {0}”, s6 == s7); Trong ba trường hợp kết trả giá trị Boolean, ta có kết sau: S6.Equals(S7) ?: True Equals(S6, s7) ?: True S6 == S7 ?: True ... ToDecimal(), Tạo chuỗi Cách phổ biến để tạo chuỗi gán cho chuỗi trích dẫn tức chuỗi nằm dấu ngoặc kép, kiểu chuỗi biết chuỗi hằng, khai báo sau: string newString = “Day la chuoi hang”; Những chuỗi trích... IsInterned() Phương thức public static kết nối chuỗi xác định Join() thành phần mảng chuỗi Indexer chuỗi Chars() Chiều dài chuỗi Length() Trả chuỗi Clone() So sánh hai chuỗi CompareTo() CopyTo() Sao chép... vị trí cuối chuỗi Xóa vị trí cuối Xóa Trim vị trí đầu TrimEnd() TrimStart() Bảng 10 .1 : Phương thức thuộc tính lớp String Trong ví dụ 10 .1 sau minh họa việc sử dụng số phương thức chuỗi Compare(),

Ngày đăng: 23/12/2013, 19:15

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan