Chuỗi Gvhd: Nguyễn Tấn Trần Minh Khang
67 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ư
. 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ự.
Chuỗi Gvhd: Nguyễn Tấn Trần Minh Khang
68
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
PadLeft()
Canh phải các ký tự trong chuỗi, chèn thêm các khoảng trắng bên
Để 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 = 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);
string.Format("{0:C}", -2.5);
$2.50
($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
(Fixed-point)
string.Format("{0:F2}", 25);
string.Format("{0:F0}", 25);
25.00
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
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