Tìm hiểu C# và ứng dụng của C# p 12

Chia sẻ: Yukogaru | Ngày: | Loại File: PDF | Số trang:5

0
75
lượt xem
18
download

Tìm hiểu C# và ứng dụng của C# p 12

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 10 Chuỗi Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long…, có đầy đủ tính chất mềm dẻo, mạnh mẽ và dễ dùng. Một đối tượng chuỗi trong C# là một hay nhiều ký tự Unicode không thể thay đổi thứ tự. Nói cách khác là các phương thức áp dụng lên chuỗi không làm thay đổi bản thân chuỗi, chúng chỉ tạo một bản sao có sửa đổi, chuỗi gốc vẫn giữ nguyên. Để khai báo một đối tượng chuỗi, sử dụng từ khóa string; đối tượng này thật sự trùng với đối tượng...

Chủ đề:
Lưu

Nội dung Text: Tìm hiểu C# và ứng dụng của C# p 12

  1. Chuỗi Gvhd: Nguyễn Tấn Trần Minh Khang Chương 10 Chuỗi Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long…, có đầy đủ tính chất mềm dẻo, mạnh mẽ và dễ dùng. Một đối tượng chuỗi trong C# là một hay nhiều ký tự Unicode không thể thay đổi thứ tự. Nói cách khác là các phương thức áp dụng lên chuỗi không làm thay đổi bản thân chuỗi, chúng chỉ tạo một bản sao có sửa đổi, chuỗi gốc vẫn giữ nguyên. Để khai báo một đối tượng chuỗi, sử dụng từ khóa string; đối tượng này thật sự trùng với đối tượng System.String trong thư viện lớp .NET Framework. Việc sử dụng hai đối tượng này là như nhau trong mọi trường hợp. Khai báo lớp System.String như sau: public sealed class String:IComparable,ICloneable,Iconvertible Khai báo này có nghĩa như sau: seal - không thể thừa kế từ lớp này ICompareable - các đối tượng chuỗi có thể được sắp thứ thự IClonable - có thể tạo một đối tượng B mới y hệt đối tượng A. IConvertible - có thể chuyển thành các kiểu dựng sẵn khác như ToInt32(), ToDouble() … 10.1 Tạo chuỗi mới Cách đơn giản nhất để tạo một biến kiểu chuỗi là khai báo và gán một chuỗi cho nó string sChuoi = "Khai báo và gán một chuỗi"; Một số ký tự đặc biệt có qui tắc riêng như "\n", "\\" hay "\t"… đại diện cho ký tự xuống dòng, dấu xuyệt (\), dấu tab…Ví dụ khai báo string sDuongDan = "C:\\WinNT\\Temp"; biến sDuongDan sẽ có giá trị C:\WinNT\Temp. C# cung cấp một cách khai báo theo đúng nguyên gốc chuỗi bằng cách thêm ký tự @. Khai báo sDuongDan sẽ như sau string sDuongDan = @"C:\WinNT\Temp"; 10.2 Phương thức ToString() Đây là phương thức của đối tượng object (và của tất cả các đối tượng khác) thường dùng để chuyển một đối tượng bất kỳ sang kiểu chuỗi. int myInteger = 5; string integerString = myInteger.ToString(); Chuỗi intergerString có giá trị là "5". Bằng cách này ta cũng có thể tạo một chuỗi mới. Chuỗi cũng có thể được tạo thông qua hàm dựng của lớp System.String. Lớp này có hàm dựng nhận vào một mảng các ký tự. Như vậy ta cũng tạo được chuỗi từ mảng ký tự. 67
  2. Chuỗi Gvhd: Nguyễn Tấn Trần Minh Khang 10.3 Thao tác chuỗi Lớp chuỗi cung cấp nhiều phương thức cho việc so sánh, tìm kiếm… được liệt kê trong bảng sau: Bảng 10-1 Các thành viên lớp string Thành viên Giải thích Empty Biến thành viên tĩnh đại diện cho một chuỗi rỗng Compare() Phương thức tĩnh so sánh hai chuỗi CompareOrdinal() Phương thức tĩnh, so sánh 2 chuỗi không quan tâm đến ngôn ngữ Concat() Phương thức tĩnh, tạo một chuỗi mới từ nhiều chuỗi Copy() Phương thức tĩnh, tạo một bản sao Equals() Phương thức tĩnh, so sánh hai chuỗi có giống nhau Format() Phương thức tĩnh, định dạng chuỗi bằng các định dạng đặc tả Intern() Phương thức tĩnh, nhận về một tham chiếu đến chuỗi IsInterned() Phương thức tĩnh, nhận về một tham chiếu đến chuỗi đã tồn tại Join() Phương thức tĩnh, ghép nối nhiều chuỗi, mềm dẻo hơn Concat() Chars Indexer của chuỗi Length Chiều dài chuỗi (số ký tự) Clone() Trả về một chuỗi CompareTo() So sánh với chuỗi khác CopyTo() Sao chép một lượng ký tự trong chuỗi sang mảng ký tự EndsWith() Xác định chuỗi có kết thúc bằng chuỗi tham số không Equals() Xác định hai chuỗi có cùng giá trị Insert() Chèn một chuỗi khác vào chuỗi LastIndexOf() vị trí xuất hiện cuối cùng của một chuỗi con trong chuỗi Canh phải các ký tự trong chuỗi, chèn thêm các khoảng trắng bên PadLeft() trái khi cần Canh trái các ký tự trong chuỗi, chèn thêm các khoảng trắng bên PadRight() phải khi cần Remove() Xóa một số ký tự Split() Cắt một chuỗi thành nhiều chuỗi con StartsWith() Xác định chuỗi có bắt đầu bằng một chuỗi con tham số SubString() Lấy một chuỗi con ToCharArray() Sao chép các ký tự của chuỗi thành mảng các ký tự ToLower() Tạo bản sao chuỗi chữ thường ToUpper() Tạo bản sao chuỗi chữ hoa Trim() Cắt bỏ các khoảng trắng hai đầu chuỗi 68
  3. Chuỗi Gvhd: Nguyễn Tấn Trần Minh Khang Thành viên Giải thích TrimEnd() Cắt bỏ khoảng trắng cuối chuỗi TrimStart() Cắt bỏ khoảng trắng đầu chuỗi Để biết chi tiết các sử dụng của các hàm trên, có thể tham thảo tài liệu của Microsoft, đặc biệt là MSDN. Dưới đây chỉ giới thiệu vài phương thức thao dụng để thao tác chuỗi. Ghép chuỗi Để ghép 2 chuỗi ta dùng toán tử + string a = "Xin"; string b = "chào"; string c = a + " " + b; // c = "Xin chào" Chú ý: việc ghép nối bằng toán tử + tuy cho mã nguồn đẹp, tự nhiên nhưng sẽ không cho hiệu quả tốt khi thực hiện nhiều lần vì C# sẽ cấp phát vùng nhớ lại sau mỗi phép ghép chuỗi. Lấy ký tự Để lấy một ký tự tại một ví trí trên chuỗi ta dùng toán tử [] string s = "Xin chào mọi người"; char c = s[5]; // c = 'h' Chú ý: vị trí rên chuỗi bắt đầu từ vị trí số 0 Chiều dài chuỗi Để biết số ký tự của chuỗi, dùng thuộc tính Length string s = "Xin chào"; int l = s.Length; // l = 8 Chú ý: không cần đóng ngoặc sau property Lấy chuỗi con Để lấy chuỗi con của một chuỗi, sử dụng phương thức Substring(). string s; /* 1 */ s = "Lay chuoi con".Substring(4);// s = "chuoi con" /* 2 */ s = "Lay chuoi con".Substring(4, 5); // s = "chuoi" Trong /*1*/ s lấy chuỗi con tính từ vị trí thứ 4 trở về sau, còn trong /*2*/ s lấy chuỗi con từ vị trí thứ 4 và lấy chuỗi con có chiều dài là 5. Thay thế chuỗi con Để thay thế chuỗi con trong chuỗi bằng một chuỗi con khác, sử dụng phương thức Replace() string s; /* 1 */ s = "thay the chuoi.".Replace('t', 'T'); // s = "Thay The chuoi" /* 2 */ s = "thay the chuoi.".Replace("th", "TH"); 69
  4. Chuỗi Gvhd: Nguyễn Tấn Trần Minh Khang // s = "THay THe chuoi" Trong /*1*/ s là chuỗi đã thay thế ký tự 't' thành 'T', còn trong /*2*/ là chuỗi đã thay thế chuỗi "th" thành "TH". Định dạng chuỗi Chuỗi được sử dụng nhiều trong trường hợp kết xuất kết quả ra cho người dùng. Trong nhiều trường hợp ta không thể có được chính xác chuỗi cần thiết mà phải phụ thuộc vào một số biến. Vì vậy hàm định dạng chuỗi giúp ta định dạng lại chuỗi trước khi kết xuất. double d = tinh_toan_phuc_tap_1(); double e = tinh_toan_phuc_tap_2(); // giả sử d = 2.5, e = 3.5 string s; s = string.Format("Kết quả là: {0:C} va {1:c} đôla", d, e); // s = "Kết quả là: $2.5 và $3.5 đôla" Hàm định dạng chuỗi khá phức tạp vì có nhiều tùy chọn. Cú pháp củ hàm định dạng tổng quát như sau string.Format(provider, format, arguments) provider: nguốn cung cấp định dạng format: chuỗi cần định dạng chứa thông tin định dạng arguments: các thông số cho định dạng C# tạo sẵn các nguồn định đạng cho kiểu số, kiểu dùng nhiều nhất, vì vậy ta chỉ quan tâm đến cú pháp rút gọn sau và các thông tin định dạng cho kiểu số. string.Format (format, arguments); Hình 10-1 Vài định dạng thông dụng Ký tự Mô tả Ví dụ Kết quả C hoặc c Tiền tệ (Currency) string.Format("{0:C}", 2.5); $2.50 string.Format("{0:C}", -2.5); ($2.50) D hoặc d Decimal string.Format("{0:D5}", 25); 00025 E hoặc e Khoa hoc (Scientific) string.Format("{0:E}", 250000); 2.500000E+005 F hoặc f Cố định phần thập phân string.Format("{0:F2}", 25); 25.00 (Fixed-point) string.Format("{0:F0}", 25); 25 G hoặc g General string.Format("{0:G}", 2.5); 2.5 N hoặc n Số (Number) string.Format("{0:N}", 2500000); 2,500,000.00 X hoặc x Hệ số 16 (Hexadecimal) string.Format("{0:X}", 250); FA string.Format("{0:X}", 0xffff); FFFF 10.4 Thao tác chuỗi động Sau mỗi thao tác lên chuỗi sẽ tạo ra một bản sao chuỗi mới. Vì vậy sử dụng đối tượng string có thể làm giảm hiệu năng hệ thống. Khi đó ta nên sử dụng lớp StringBuilder (một loại chuỗi khác). Các thao tác lên chuỗi làm thay đổi trên chính chuỗi. Vài phương thức quan trọng của lớp được liệt kê dưới đây. 70
  5. Chuỗi Gvhd: Nguyễn Tấn Trần Minh Khang Phương thức Giải thích Capacity Lấy/thiết đặt số ký tự tối đa chuỗi có thể lưu giữ Chars Indexer Length Kích thước chuỗi MaxCapacity Lấy số ký tự tối đa lớp có thể lưu giữ Append() Thêm một đối tượng vào cuối chuỗi AppendFormat() Định dạng chuỗi tham số, sau đó thêm chuỗi này vào cuối EnsureCapacity() Xác định chuỗi có thể lưu giữ tối thiểu một lượng ký tự không Insert() Chèn một đối tượng vào chuỗi tại vị trí Remove() Xóa một số ký tự trong chuỗi Replace() Thay một ký tự/chuỗi con bằng ký tự/chuỗi con mới Ví dụ 10-1 Sử dụng StringBuilder using System; using System.Text; namespace Programming_CSharp { public class StringTester { static void Main( ) { // một chuỗi bất kỳ để thao tác string s1 = "One,Two,Three Liberty Associates, Inc."; // hằng ký tự const char Space = ' '; const char Comma = ','; // mảng các dấu cách char[] delimiters = new char[]{ Space, Comma }; // dùng StringBuilder để tạo một chuỗi StringBuilder output = new StringBuilder( ); int ctr = 1; // tách chuỗi, sau đó ghép lại theo dang mong muốn // tách chuỗi theo các dấu phân cách trong delimiter foreach (string subString in s1.Split(delimiters)) { // chèn một chuỗi sau khi định dạng chuỗi xong output.AppendFormat("{0}: {1}\n",ctr++,subString); } Console.WriteLine(output); } } } Kết quả: 1: One 2: Two 3: Three 4: Liberty 5: Associates 6: 7: Inc. 71
Đồng bộ tài khoản