Tài liệu: Chuỗi

Tài liệu
phamvanviet

Tóm tắt nội dung

Kiểu chuỗi trong C#
Chuỗi

Nội dung

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()

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";

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ự.

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:

Các thành viên của lớp String
Thành viên Giải thích
Empty Bi& #7871;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 trái khi cần
PadRight() Canh trái các ký tự trong chuỗi, chèn thêm các khoảng trắng bên 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
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"     
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'

Vị trí trê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 
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()

/* 1 */ s = "thay the chuoi.".Replace('t', 'T'); // s = "Thay The chuoi" /* 2 */ s = "thay the chuoi.".Replace("th", "TH"); // 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);
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.0025
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);string.Format("{0:X}", 0xffff); FAFFFF

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.

Vài phương thức quan trọng của lớp
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
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. 
Tìm hiểu C# và ứng dụng



Nguồn: voer.edu.vn/m/chuoi/cad72431


Chưa có phản hồi
Bạn vui lòng Đăng nhập để bình luận