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() …
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
\\
\t
tự xuống dòng, dấu xuyệt (
\
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ự
@
string sDuongDan = @"C:\WinNT\Temp";
Đâ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ự.
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:
Để 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 2 chuỗi ta dùng toán tử +
string a = "Xin"; string b = "chào"; string c = a + " " + b; // c = "Xin chào"
Để 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'
Vị trí trên chuỗi bắt đầu từ vị trí số 0
Để 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
Để 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*/
/*2*/
Để 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()
/* 1 */ s = "thay the chuoi.".Replace('t', 'T'); // s = "Thay The chuoi" /* 2 */ s = "thay the chuoi.".Replace("th", "TH"); // s = "THay THe chuoi"
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);
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.
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.