09 June 2016

String in C# .NET

Lớp String là 2 lớp cơ bản trong .NET giúp người dùng thao tác với chuỗi 1 cách nhanh-gọn-lẹ hơn, hầu như trong .NET, bạn sẽ không phải “gồng mình” với những thao tác xử lý chuỗi phức tạp vì C# đã cung cấp cho bạn những phương thức để xử lý chúng. 
Hiểu sơ qua về lớp String:
- Một thể hiện của lớp String thì không thay đổi, nghĩa là mỗi khi một thể hiện được tạo, nó không bị chỉnh sửa được. Nó có những phương thức mà trả về 1 chuỗi mới, 1 chuỗi con từ 1 chuỗi cha.
- Chỉ mục trong String được tính từ số 0 (zero based). Nghĩa là ký tự đầu tiên trong chuỗi bất kỳ sẽ có chỉ mục là 0.
- Mặc định, String sẽ trả về 1 chuỗi rỗng (“”), bởi thế bạn không cần phải khởi tạo nó như bạn đã từng làm trong C++ hoặc các ngôn ngữ khác. Lưu ý: một chuỗi rỗng thì lớn hơn một chuỗi null. ^ ^
Những thành viên trong lớp String:
Lớp String cung cấp 2 thuộc tính – Chars và Length. Thuộc tính Chars trả về 1 ký tự tại 1 vị trí xác định trong chuỗi. Còn thuộc tính Length trả về số lượng ký tự có trong chuỗi.
Lớp String cung cấp 2 loại phương thức – static và instance. Phương thức Static chỉ có thể được sử dụng với lớp String (khỏi phải tạo 1 thể hiện của lớp String nè), còn phương thức Instance chỉ sử dụng được thông qua thể hiện của lớp String.

So sánh 2 chuỗi:
Phương thức Compare so sánh 2 chuỗi và trả về 1 giá trị kiểu int. Giá trị này có thể lớn hơn, nhỏ hơn hoặc bằng 0
+ Nhỏ hơn 0: chuỗi 1 nhỏ hơn chuỗi 2
+ Bằng 0: 2 chuỗi bằng nhau
+ Lớn hơn 0: chuỗi 1 lớn hơn chuỗi 2
Visual C# Code:
  1. // So sanh 2 chuoi bat ky
  2. //====================================
  3. string str1 = "ppp";
  4. string str2 = "ccc";
  5. int res = String.Compare(str1, str2);
  6. Console.WriteLine("First result:" +res.ToString());
  7. str2 = "ttt";
  8. res = String.Compare(str1, str2);
  9. Console.WriteLine("Second result:" +res.ToString());
  10. str1 = "ttt";
  11. res = String.Compare(str1, str2);
  12. Console.WriteLine("Third result:" +res.ToString));
  13. //====================================
Bạn có thể so sánh chuỗi như sau:
Visual C# Code:
  1. string str = "kkk";
  2. Console.WriteLine( str.CompareTo(str1) );

Sao chép và nối chuỗi:
Phương thức Concat nối nhều chuỗi và trả về 1 chuỗi mới. Sử dụng Concat, bạn có thể nối 2 chuỗi bất kỳ như sau:
Visual C# Code:
  1. string chuoi01 = "ppp";
  2. string chuoi02 = "ccc";
  3. string chuoiketqua = String.Concat(chuoi01, chuoi02);
  4. Console.WriteLine(chuoiketqua);
Đoạn code sau minh họa việc nối 1 chuỗi với 1 đối tượng:
Visual C# Code:
  1. object obj = (object)12;
  2. chuoiketqua = String.Concat(chuoi01, obj);
  3. Console.WriteLine(chuoiketqua);

Phương thức Copy sao chép nội dung 1 chuỗi đến 1 chuỗi khác. Code minh họa như sau:
Visual C# Code:
  1. string chuoi01 = "ppp";
  2. string chuoi02 = "ccc";
  3. string chuoiketqua = String.Copy(chuoi01);
  4. Console.WriteLine("Copy result :" + chuoiketqua);

Phương thức Clone trả về 1 bản sao chép của 1 chuỗi từ 1 đối tượng. Đoạn code sau đây minh họa việc tạo 1 bản sao chép của chuoi01:
Visual C# Code:
  1. string chuoi01 = "ppp";
  2. object objClone = str1.Clone();
  3. Console.WriteLine("Clone :"+objClone.ToString());

Phương thức Join hữu ích khi bạn cần chèn 1 saparator (khó dịch quá, tạm dịch là "chuỗi nhận dạng") vào giữa những phần tử trong chuỗi. Nói thế khó hiểu quá, mình cho ví dụ sau để dễ hiểu:
Visual C# Code:
  1. string str1 = "ppp";
  2. string str2 = "ccc";
  3. string str3 = "kkk";
  4. string[] allStr = new String[]{str1, str2, str3};
  5. string strRes = String.Join(", ", allStr);
  6. Console.WriteLine("Join Results: "+ strRes);

Output Code:
  1. Join Results: ppp, ccc, kkk

Thêm, xóa và thay thế chuỗi:
Phương thức Insert chèn 1 chuỗi bất kỳ vào 1 chỉ mục của 1 thể hiện String. Ví dụ:
Visual C# Code:
  1. string chuoi01 = "ppp";
  2. string chuoiketqua = chuoi01.Insert(2"bbb");
  3. Console.WriteLine(strRes.ToString());

Output Code:
  1. ppbbbp
Phương thức Remove xóa 1 số ký tự bất kỳ từ 1 vị trí bất kỳ trong 1 chuỗi. Phương thức này trả về 1 kết quả là 1 chuỗi. Ví dụ, đoạn code sau xóa 3 ký tự từ chỉ mục thứ 3
Visual C# Code:
  1. string s = "123abc000";
  2. Console.WriteLine(s.Remove(33));

Output Code:
  1. 123000

Phương thức Replace thay thế những ký tự bất kỳ trong chuỗi thành những ký tự do bạn chỉ định. Sau đây là đoạn code minh họa:
Visual C# Code:
  1. string chuoi01 = "ppp";
  2. string chuoiketqua = str1.Replace('p''l');
  3. Console.WriteLine("Replaced string:"+ chuoiketqua.ToString() );

Output Code:
  1. Replaced string:lll

UperCase và LowerCase một chuỗi:
Visual C# Code:
  1. string aStr = "adgas";
  2. string bStr = "ABNMDWER";
  3. string strRes = aStr.ToUpper();
  4. Console.WriteLine("Uppercase:"+ strRes.ToString());
  5. strRes = bStr.ToLower();
  6. Console.WriteLine("Lowercase:"+ strRes.ToString());
Output:
Output Code:
  1. Uppercase:ADGAS
  2. Lowercase:abnmdwer
String C# một vài đặc điểm bổ sung lại
Assignment fpt aptech C# 2016

Một vài đặc điểm chính

http://www.bravohex.com/2015/07/working-with-strings-in-c-sharp.html - Có thể gán dữ liệu cho một đối tượng string bằng cách khai báo như sau: string a = "This is a text!"; string b = new String("Hello"); - Strings là immutable - nội dung của một đối tượng chuỗi không thể thay đổi sau khi đối tượng được tạo ra. Để nối chuỗi ta sử dụng toán tử  (+) điều này làm nó trông giống string có thể mutable, tuy nhiên không phải là như thế. Ví dụ: string a = "Hello"; a += "Wolrd!"; Trình biên dịch sẽ tạo một chuỗi mới "Hello World" và gán nó cho a. Chuỗi cũ "Hello" sẽ được GC (garbage collection) thu gom. - Toán tử [] có thể dùng để truy cập readonly các ký tự của chuỗi (Bạn không thể modify ngược lại đối tượng string). Ví dụ: string a ="Goodbye!"; char c= a[0]; //result: c ='G' - Một chuỗi string phải được đặt trong 2 dấu ngoặc kép hoặc @ và hai dấu ngoặc kép. Ví dụ: string path = "C\\Program\\"; string path = @"C:\Program" Với đường dẫn, cú pháp với @ tiện lợi hơn và giữ đúng nguyên văn của chuỗi. - Chuỗi string có thể chứa bất kỳ ký tự nào. Trong đó có cả mã Escape

Làm việc với Strings

Length - Độ dài

Để tính độ dài của chuỗi ta sử dụng properties Length. Kết quả được tính bao gồm cả khoảng trống. string a = "Obtaining the Length!"; Console.WriteLine("A length = {0}",a.Length); //Result: A length = 21

Concatenating - Nối chuỗi

Để nối chuỗi bạn có thể sử dụng toán tử (+). Tuy nhiên ta cũng có thể sử dụng phương thức Concat() để nối chuỗi. string a = "Say"; string b = "Hello"; string c = "Wolrd!"; string[] arrayString = new string[5]; arrayString[0] = "a"; arrayString[1] = "b"; arrayString[2] = "c"; arrayString[3] = "d"; arrayString[4] = "f"; string r1 = String.Concat(a, b); string r2 = String.Concat(a,"\t",b,"t",c); //and more.. string r3 = String.Concat(arrayString); Console.WriteLine(r1); Console.WriteLine(r2); Console.WriteLine(r3);

Comparing - So sánh

Bạn có thể dùng toán tử (== hoặc !=) để so sánh hai chuỗi có giống nhau hoặc không (Bao gồm cả khoảng trống và in hoa, in thường). Tuy nhiên điều này khá hạn chế, ta có một phương thức so sánh khác đó là Compare(), kết quả trả về 0 hoặc -1 (match hoặc not match). string a = "Hello World"; string b = "HELLO WORLD"; var result = String.Compare(a, b); //-1 var result1 = String.Compare(a, b, true); //0 var result2 = String.Compare(a, b, false); //-1 Console.WriteLine(result == 0 ? "MATCH" : "NOT MATCH"); //NOT MATCH Console.WriteLine(result1 == 0 ? "MATCH" : "NOT MATCH"); //MATCH Console.WriteLine(result2 == 0 ? "MATCH" : "NOT MATCH"); //NOT MATCH

String Case - In hoa, In thường

Case của ký tự trong một chuỗi string có thể là IN HOA hoăc in thường. Ta có thể sử dụng 2 phương thức ToUpper() và ToLower() để thực hiện. string a = "Hello World"; Console.WriteLine(a.ToUpper()); //HELLO WORLD

Splitting - Tách chuỗi

Đây là phương thức cắt chuỗi dựa vào giá trị xác định được khai báo trước. Ta có thể sử dụng 3 cách split đơn giản như sau:
  • char[] split
  • string[] split
  • Regex.Split
Với char[] split: string text = "Hello\n\rThis is a text message"; char[] split1 = { ' ', '.', ';', ',','\r','\n' }; string[] result1 = text.Split(split1); string[] result2 = text.Split(split1, 2); string[] result3 = text.Split(split1, 2, StringSplitOptions.RemoveEmptyEntries); string[] result4 = text.Split(split1, StringSplitOptions.RemoveEmptyEntries); foreach (var s in result1) {  Console.WriteLine(s); } Bạn phải khai báo các ký tự để làm điểm tách của chuỗi. Kết quả in ra sẽ không bao gồm các ký tự này. StringSplitOptions.RemoveEmptyEntries sẽ xóa đi các vị trí rỗng trong chuỗi gây ra bởi các Escape. Nó sẽ được thực thi sau khi chuỗi được tách.
Với string[] split: string text = "Hello\n\rThis is a text message"; string[] split1 = {"\n","\r","is"}; string[] result3 = text.Split(split1, 3, StringSplitOptions.RemoveEmptyEntries); string[] result4 = text.Split(split1, StringSplitOptions.RemoveEmptyEntries); Với Regex.Split: Nó cần một pattern quy định cách tách chuỗi, tuy tốc độ kém 2 cách trên nhưng bù lại khá là mạnh mẽ. string text = "123ABCDE456FGHIJKL789MNOPQ012"; string pattern = @"\d+"; // "\\d+" var data = Regex.Split(text, pattern); foreach (var s in data) { Console.WriteLine(s); } Kết quả trả về là một mảng chứa các giá trị gồm chữ và nếu là số sẽ bị rỗng.
Tham khảo thêm Regular Expression Language tại MSDN Đó chỉ là một trong các phương thức của Regex. Các phần khác chúng ta sẽ không tìm hiểu tại đây.

Trimming - Cắt tỉa chuỗi

string text = " Hell o everybody! "; var result1 = text.Trim(); var result2 = text.TrimStart(); var result3 = text.TrimEnd(); Đây là cách đơn giản để loại bỏ khoảng trống 2 đầu của chuỗi hoặc chỉ một đầu tuy bạn.

Padding  - Tạo khoảng trống

string text = "Hello"; var result1 = text.PadLeft(10); var result2 = text.PadRight(10); Console.WriteLine(result1); Console.WriteLine(result2);

Replacement - Thay thế

string text = "Hello World"; var result1 = text.Replace('l', 'L'); var result2 = text.Replace("World", "Everybody"); Thay thế giá trị cũ bằng giá trị mới

Substring - Tách chuỗi con

Bạn muốn lấy một đoạn trong chuỗi thì có thể sử dụng phương pháp nayf string text = "Hello World"; var result1 = text.Substring(6); var result2 = text.Substring(6,5);//index và length

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang