CopyTo
Bảng 3.2: Phương thức và thuộc tính của lớp String
Trong ví dụ 3.5 sau đây minh họa việc sử dụng một số các phương thức của chuỗi như Compare(), Concat() (và dùng toán tử +), Copy() (và dùng toán tử =), Insert(), EndsWith() và IndexOf.
Ví dụ 3.5: Thao tác với chuỗi.
namespace Vidu3_5
{
class Program
{
static void Main(string[] args)
{
Có thể bạn quan tâm!
- Kết Quả Chương Trình Ví Dụ 2.18.
- Các Phương Thức Và Thuộc Tính Của System.array.
- Kết Quả Chương Trình Ví Dụ 3.2.
- Nội Dung Tập Tin Tapnhiphan.data Được Mở Bằng Wordpad.
- Các Phương Thức Đọc Của Binaryreader.
- Kết Quả Chương Trình Ví Dụ 3.15.
Xem toàn bộ 212 trang tài liệu này.
// khởi tạo một số chuỗi để thao tác
string s1 = "abcd"; string s2 = "ABCD"; string s3 = @"Khoa CNTT
Truong Dai hoc Su pham Ky thuat Nam Dinh"; int ketqua;
// So sánh hai chuỗi với nhau có phân biệt chữ thường và chữ hoa ketqua = string.Compare( s1 ,s2);
Console.WriteLine("So sanh hai chuoi S1: {0} và S2: {1} ket qua:
{2} n",s1 ,s2 ,ketqua);
// Sử dụng tiếp phương thức Compare() nhưng trường hợp này không
biệt
// chữ thường hay chữ hoa
// Tham số thứ ba là true sẽ bỏ qua kiểm tra ký tự thường – hoa
ketqua = string. Compare(s1, s2, true);
Console.WriteLine("Khong phan biet chu thuong va hoan"); Console.WriteLine("S1: {0} , S2: {1}, ket qua : {2}n", s1, s2,
ketqua);
chuỗi
// phương thức nối các chuỗi string s4 = string.Concat(s1, s2);
Console.WriteLine("Chuoi S4 noi tu chuoi S1 va S2: {0}", s4);
// sử dụng nạp chồng toán tử + string s5 = s1 + s2;
Console.WriteLine("Chuoi S5 duoc noi tu chuoi S1 va S2: {0}", s5);
// Sử dụng phương thức copy chuỗi string s6 = string.Copy(s5);
Console.WriteLine("S6 duoc sao chep tu S5: {0}", s6);
// Sử dụng nạp chồng toán tử = string s7 = s6;
Console.WriteLine("S7 = S6: {0}", s7);
// Sử dụng ba cách so sánh hai chuỗi
// Cách 1 sử dụng một chuỗi để so sánh với chuỗi còn lại Console.WriteLine("S6.Equals(S7) ?: {0}", s6.Equals(s7));
// Cách 2 dùng hàm của lớp string so sánh hai chuỗi Console.WriteLine("Equals(S6, s7) ?: {0}", string.Equals(s6, s7));
// Cách 3 dùng toán tử so sánh Console.WriteLine("S6 == S7 ?: {0}", s6 == s7);
// Sử dụng hai thuộc tính hay dùng là chỉ mục và chiều dài của
Console.WriteLine("nChuoi S7 co chieu dai la : {0}", s7.Length); Console.WriteLine("Ky tu thu 3 cua chuoi S7 la : {0}", s7[2] );
// Kiểm tra xem một chuỗi có kết thúc với một nhóm ký
// tự xác định hay không
Console.WriteLine("S3: {0}n ket thuc voi chu CNTT ? : {1}n", s3, s3.EndsWith("CNTT"));
Console.WriteLine("S3: {0}n ket thuc voi chu Dinh ? : {1}n", s3, s3.EndsWith("Dinh"));
// Trả về chỉ mục của một chuỗi con
Console.WriteLine("nTim vi tri xuat hien dau tien cua chu CNTT "); Console.WriteLine("trong chuoi S3 là {0}n", s3.IndexOf("CNTT"));
// Chèn từ nhân lực vào trước CNTT trong chuỗi S3 string s8 = s3.Insert(18, "nhan luc "); Console.WriteLine(" S8 : {0}n", s8);
// Ngoài ra có thể kết hợp như sau
string s9 = s3.Insert( s3.IndexOf( "CNTT" ) , "nhan luc "); Console.WriteLine(" S9 : {0}n", s9);
Console.ReadLine();
}
}
}
Kết quả chương trình:
Hình 3.5: Kết quả chương trình ví dụ 5
Chương trình bắt đầu với ba khai báo chuỗi:
string s1 = “abcd”; string s2 = “ABCD”;
string s3 = @“Khoa CNTT
Truong Dai hoc Su pham Ky thuat Nam Dinh”;
Hai chuỗi đầu s1 và s2 được khai báo chuỗi ký tự bình thường, còn chuỗi thứ ba được khai báo là chuỗi nguyên văn (verbatim string) bằng cách sử dụng ký hiệu @ trước chuỗi. Chương trình bắt đầu bằng việc so sánh hai chuỗi s1và s2. Phương thức Compare() là phương thức tĩnh của lớp string và phương thức này đã được nạp chồng. Phiên bản đầu tiên của phương thức nạp chồng này là lấy hai chuỗi và so sánh chúng với nhau:
// So sánh hai chuỗi với nhau có phân biệt chữ thường và chữ hoa ketqua = string.Compare( s1 ,s2);
Console.WriteLine(“So sanh hai chuoi s1: {0} và s2: {1} ket qua: {2} n”, s1 ,s2 ,ketqua);
Ở đây việc so sánh có phân biệt chữ thường và chữ hoa, phương thức trả về các giá trị khác nhau phụ thuộc vào kết quả so sánh:
- Một số âm nếu chuỗi đầu tiên nhỏ hơn chuỗi thứ hai
- Giá trị 0 nếu hai chuỗi bằng nhau
- Một số dương nếu chuỗi thứ nhất lớn hơn chuỗi thứ hai.
Trong trường hợp so sánh trên thì đưa ra kết quả là chuỗi s1 nhỏ hơn chuỗi s2.
Trong
Unicode cũng như ASCII thì thứ tự của ký tự thường nhỏ hơn thứ tự của ký tự hoa: So sanh hai chuoi S1: abcd và S2: ABCD ket qua: -1
Cách so sánh thứ hai dùng phiên bản nạp chồng Compare() lấy ba tham số. Tham số Boolean quyết định bỏ qua hay không bỏ qua việc so sánh phân biệt chữ thường và chữ hoa. Tham số này có thể bỏ qua. Nếu giá trị của tham số là true thì việc so sánh sẽ bỏ qua sự phân biệt chữ thường và chữ hoa. Việc so sánh sau sẽ không quan tâm đến kiểu loại chữ:
// Tham số thứ ba là true sẽ bỏ qua kiểm tra ký tự thường – hoa ketqua = string. Compare(s1, s2, true); Console.WriteLine(“Khong phan biet chu thuong va hoan”);
Console.WriteLine(“S1: {0} , S2: {1}, ket qua : {2}n”, s1, s2, ketqua); Lúc này thì việc so sánh hoàn toàn giống nhau và kết quả trả về là giá trị 0: Khong phan biet chu thuong va hoa
S1: abcd , S2: ABCD, ket qua : 0
Ví dụ 3.5 tiếp tục với việc nối các chuỗi lại với nhau. Ở đây sử dụng hai cách để nối hai chuỗi. Thứ nhất có thể sử dụng phương thức Concat()là phương thức public static của string:
string s4 = string.Concat(s1, s2);
Hay cách khác đơn giản hơn là việc sử dụng toán tử nối hai chuỗi (+):
sau:
string s5 = s1 + s2;
Trong cả hai trường hợp thì kết quả nối hai chuỗi hoàn toàn thành công và như
Chuoi S4 noi tu chuoi S1 va S2: abcdABCD Chuoi S5 duoc noi tu chuoi S1 + S2: abcdABCD
Tương tự như vậy, việc tạo một chuỗi mới có thể được thiết lập bằng hai cách.
Đầu tiên là có thể sử dụng phương thức static Copy() như sau:
string s6 = string.Copy(s5);
Hoặc thuận tiện hơn có thể sử dụng phương thức nạp chồng toán tử (=) thông qua việc sao chép ngầm định:
string s7 = s6;
Kết quả của hai cách tạo trên đều hoàn toàn như nhau: S6 duoc sao chep tu S5: abcdABCD
S7 = S6: abcdABCD
Lớp String của .NET cung cấp ba cách để kiểm tra bằng nhau giữa hai chuỗi. Đầu tiên là có thể sử dụng phương thức nạp chồng Equals() để kiểm tra trực tiếp rằng S6 có bằng S7 hay không:
Console.WriteLine(“S6.Equals(S7) ?: {0}”, S6.Equals(S7));
Kỹ thuật so sánh thứ hai là truyền cả hai chuỗi vào phương thức Equals() của
string:
String:
sau:
Console.WriteLine(“Equals(S6, s7) ?: {0}”, string.Equals(S6, S7));
Và phương pháp cuối cùng là sử dụng nạp chồng toán tử so sánh (==) của
Console.WriteLine(“S6 == S7 ?: {0}”, s6 == s7);
Trong cả ba trường hợp thì kết quả trả về là một giá trị Boolean, kết quả như
S6.Equals(S7) ?: True Equals(S6, s7) ?: True S6 == S7 ?: True
Các đoạn chương trình tiếp theo của ví dụ sử dụng toán tử chỉ mục ([]) để tìm ra
ký tự xác định trong một chuỗi. Và dùng thuộc tính Length để lấy về chiều dài của toàn bộ một chuỗi:
Console.WriteLine(“nChuoi S7 co chieu dai la : {0}”, s7.Length); Console.WriteLine(“Ky tu thu 3 cua chuoi S7 la : {0}”, s7[2] ); Kết quả là:
Chuoi S7 co chieu dai la: 8
Ky tu thu 3 cua chuoi S7 la: c
Phương thức EndsWith() kiểm tra xem một chuỗi có chứa một chuỗi con ở vị trí chuỗi hay không. Do vậy, để kiểm tra chuỗi S3 có kết thúc bằng chuỗi ―CNTT‖ hay chuỗi ―Dinh‖:
// Kiểm tra xem một chuỗi có kết thúc với một nhóm ký tự xác định hay không
Console.WriteLine(“S3: {0}n ket thuc voi chu CNTT ? : {1}n”, s3, s3.EndsWith(“CNTT”));
Console.WriteLine(“S3: {0}n ket thuc voi chu Dinh ? : {1}n”, s3, s3.EndsWith(“Dinh”));
Kết quả trả về là lần kiểm tra đầu tiên là sai do chuỗi S3 không kết thúc chữ
―CNTT‖ và lần kiểm tra thứ hai là đúng: S3: Khoa CNTT
Truong Dai hoc Su pham Ky thuat Nam Dinh ket thuc voi chu CNTT ? : False
S3: Khoa CNTT
Truong Dai hoc Su pham Ky thuat Nam Dinh ket thuc voi chu Dinh? : True
Phương thức IndexOf() chỉ ra vị trí của một chuỗi con bên trong một chuỗi (nếu có). Và phương thức Insert() chèn một chuỗi con vào một bản sao chép của chuỗi ban đầu. Đoạn lệnh tiếp theo của ví dụ minh họa thực hiện việc xác định vị trí xuất hiện đầu tiên của chuỗi ―CNTT‖ trong chuỗi S3:
Console.WriteLine(“nTim vi tri xuat hien dau tien cua chu CNTT ”); Console.WriteLine(“trong chuoi S3 là {0}n”, s3.IndexOf(“CNTT”)); Và kết quả tìm được là 5:
Tim vi tri xuat hien dau tien cua chu CNTT trong chuoi S3 là 5
Để chèn vào chuỗi s3 từ ―nhan luc‖ và theo sau chuỗi này là một khoảng trắng vàotrong chuỗi ban đầu. Khi thực hiện thì phương thức trả về bản sao của chuỗi đã được chènvào chuỗi con và được gán lại vào chuỗi S8:
string s8 = s3.Insert(18, “nhan luc ”); Console.WriteLine(“ S8 : {0}n”, s8); Kết quả đưa ra là:
S8: Khoa CNTT
nhan luc Truong Dai hoc Su pham Ky thuat Nam Dinh
Cuối cùng, kết hợp một số các phép toán để thực hiện việc chèn như sau:
string s9 = s3.Insert( s3.IndexOf( “CNTT” ) , “nhan luc ”);
Console.WriteLine(“ S9 : {0}n”, s9);
Kết quả cuối cùng cũng tương tự như cách chèn bên trên: S9: Khoa nhan luc CNTT
Truong Dai hoc Su pham Ky thuat Nam Dinh
Tìm một chuỗi con
Trong kiểu dữ liệu String cung cấp phương thức Substring() để trích một chuỗi con từ chuỗi ban đầu. Có hai hàm tải bội của phương thức Substring(). Trong ví dụ 3.6 minh họa việc sử dụng phương thức Substring() của chuỗi.
Ví dụ 3.6: Sử dụng phương thức Substring().
namespace Vidu3_6
{
class Program
{
static void Main(string[] args)
{
khoảng
// Khai báo các chuỗi để sử dụng string s1 = "Mot hai ba bon"; int ix;
// lấy chỉ số của khoảng trắng cuối cùng ix = s1.LastIndexOf(" ");
// lấy từ cuối cùng
string s2 = s1.Substring( ix+1);
// thiết lập lại chuỗi s1 từ vị trí 0 đến vị trí ix
// do đó s1 có giá trị mới là mot hai ba s1 = s1.Substring(0, ix);
// tìm chỉ số của khoảng trắng cuối cùng (sau hai) ix = s1.LastIndexOf(" ");
// thiết lập s3 là chuỗi con bắt đầu từ vị trí ix
// do đó s3 = "ba"
string s3 = s1.Substring(ix+1);
// thiết lập lại s1 bắt đầu từ vị trí 0 đến cuối vị trí ix
// s1 = "mot hai"
s1 = s1.Substring(0, ix);
// ix chỉ đến khoảng trắng giữa "mot" va "hai" ix = s1.LastIndexOf(" ");
// tạo ra s4 là chuỗi con bắt đầu từ sau vị trí ix, do
// vậy có giá trị là "hai" string s4 = s1.Substring( ix+1);
// thiết lập lại giá trị của s1
s1 = s1.Substring(0, ix);
// lấy chỉ số của khoảng trắng cuối cùng, lúc này ix là –1 ix = s1.LastIndexOf(" ");
// tạo ra chuỗi s5 bắt đầu từ chỉ số khoảng trắng, nhưng không có
// trắng và ix là –1 nên chuỗi bắt đầu từ 0 string s5 = s1.Substring(ix +1); Console.WriteLine("s2 : {0}n s3 : {1}", s2, s3);
Console.WriteLine("s4 : {0}n s5 : {1}n", s4, s5);
Console.WriteLine("s1: {0}n", s1); Console.ReadLine();
}
}
}
Kết quả chương trình:
Hình 3.6: Kết quả chương trình ví dụ 3.6.
Chia chuỗi
Để sử dụng Split(), phải truyền vào một mảng các ký tự phân cách, các ký tự này được dùng để chia các từ trong chuỗi. Và phương thức sẽ trả về một mảng những chuỗi con.
Ví dụ 3.7: Sử dụng phương thức Split().
namespace Vidu3_7
{
class Program
{
static void Main(string[] args)
{
// tạo các chuỗi để làm việc
string s1 = "Mot, hai, ba Trung Tam Dao Tao CNTT";
// tạo ra hằng ký tự khoảng trắng và dấu phẩy const char khoangcach = ' ';
const char dauphay = ',';
// tạo ra mảng phân cách
char[] mangphancach = new char[]
{
khoangcach, dauphay
};
string chuoiketqua = ""; int ctr = 1;
// thực hiện việc chia một chuỗi dùng vòng lặp
// đưa kết quả vào mảng các chuỗi