- Chuỗi ký tự
- Chuỗi nguyên bản với @
- Chèn thêm biểu thức vào chuỗi với $
- Một số phương thức String
- StringBuilder
- Sử dùng biểu thức chính quy
string - chuỗi ký tự C#
Chuỗi ký tự thực tế ta đã làm việc với nó ở các ví dụ trước, chuỗi là một tập hợp các ký tự sắp xếp có vị trí,
nó chỉnh là một mảng các ký tự, kiểu dữ liệu chuỗi đó là string
, lớp biểu diễn các chuỗi là
System.String
Bạn có thể khai báo, khởi tạo chuỗi với kiểu string
, cũng như thực hiện các phép toán trên chuỗi...
string sExample = "Xin chào"; // Khai báo và khởi tạo chuỗi sExample += " các bạn"; // Nối chuỗi +=, trả về "Xin chào các bạn" sExample = sExample + "!"; // Nối chuỗi +, trả về "Xin chào các bạn!"
Chuỗi như là mảng mà phần tử mảng là các ký tự, nên có thể truy cập phần tử mảng bằng indexer để đọc ký tự:
char c = sExample[1]; // c= 'i'
Chuỗi nhập vào viết trong cặp nháy kép ""
,
chèn vào chuỗi các ký tự đặc biệt ta dùng ký hiệu \
:
ví dụ \\
là ký tự \
,
\"
là ký tự "
,
\n
là ký tự xuống dòng, \r
là ký tự về đầu dòng ...
Viết chuỗi nguyên bản với ký hiệu @ trong C#
Khi viết chuỗi trong cặp dấu nháy kép ""
,
thì các ký tự đặt biệt được xử lý với ký hiệu \
, ví dụ nếu bạn viết:
string s = "C:\\Abc\\xyz"; // Nếu viết string s = "C:\Abc\xyz"; sẽ lỗi
Thì nội dung thực tế của chuỗi là C:\Abc\xyz
Nếu muốn viết chuỗi cố định, nội dung nguyên bản - cho biết sẽ không dùng \
để xử lý ký tự đặc biệt,
thì thêm @
vào đầu chuỗi:
string s = @"Ký tự \ được dùng để chèn ký tự đặc biệt như \n, \r";
Bằng ký hiệu @
chuỗi viết thế nào thì nội dung thực tế sẽ như vậy, ngoại trừ hai ký tự ""
chuyển thành một ký tự ""
string s = "Anh ấy nói, ""Đây là C#"""; //~ Anh ấy nói "Đây là C#"
Ngoài ra bạn có thể viết chuỗi trên nhiều dòng với ký hiệu @
string s = @"Xin chào các bạn Tôi đang học C#";
Chèn thêm biểu thức vào chuỗi với ký hiệu $ trong C#
Khi viết chuỗi có ký tự $
phía trước, thì trong chuỗi đó có thể chèn các biểu thức vào chỗ có
cặp {} : {biểu-thức}
int a = 10; int b = 2; string s = $"Kết quả {a}/{b} là {a/b}"; // "Kết quả 10/2 là 5"
Ngoài ra bạn có thể căn lề, định dạng số, ngày tháng ... tương tự như chuỗi định dạng
Console.WriteLine($"{"VòngLặp",10} {"Chẵn/Lẻ", -5}"); for (int i = 8; i < 15; i++) { string chanle = (i%2 == 0) ? "Chẵn" : "Lẻ"; Console.WriteLine($"{i,10} {chanle, -5}"); } Kết quả: VòngLặp Chẵn/Lẻ 8 Chẵn 9 Lẻ 10 Chẵn 11 Lẻ 12 Chẵn 13 Lẻ 14 Chẵn
Ký hiệu {i,10}
là để ra một khoảng trống 10 ký tự, chèn giá trị i vào khoảng trống đó với căn lề
bên phải. Ký hiệu {chanle, -5} là đề ra 5 khoảng trống chèn giá trị và căn lề trái.
Một số phương thức làm việc với chuỗi C#
Ví dụ có hai biến chuỗi, thực hiện một số phép toán:
string stringA = "Xin chào,"; string stringB = "các bạn!";
method | Sử dụng |
---|---|
Concat |
phương thức tĩnh, nối các chuỗi liệt kê ở tham số lại với nhau
string s = String.Concat(stringA, stringB); // s = "Xin chào,các bạn!" |
Format |
Convert các đối tượng thành chuỗi và chèn chúng vào chuỗi định dạng được chỉ ra, cú pháp cơ bản
String.Format(stringFormat, arg0, arg1 ...) Trong đó string s = String.Format("Chào {0}, {0} ơi, hôm nay ngày {1} rồi!", "Nam", DateTime.Now.Day); // s = "Chào Nam, Nam hôm nay ngày 20 rồi!" Nhìn vào, chuỗi định dạng chỗ nào có Tại các vị trí cần chèn |
IndexOf |
Tìm vị trí (đầu tiên) của ký tự hoặc chuỗi ký tự trong chuỗi |
LastIndexOf |
Tìm vị trí (cuối) của ký tự hoặc chuỗi ký tự trong chuỗi |
Insert |
Tạo chuỗi = chèn chuỗi này vào trong chuỗi khác, vị trí chèn cần chỉ ra
var s = stringA.Insert(8, " tất cả"); // "Xin chào tất cả," |
PadLeft |
Tạo chuỗi mới từ chuỗi cũ, độ dài chuỗi mới chỉ ra - nếu độ dài chuỗi mới lớn hơn chuỗi cũ thì
các ký tự phía đầu được chèn khoảng trắng hoặc ký tự chỉ định.
string s1 = "Abc"; string s2 = s1.PadLeft(6); // " Abc" string s3 = s1.PadLeft(6, '*'); // "***Abc" |
PadRight |
Tương tự PadLeft nhưng chèn khoảng trắng bên phải |
Replace |
Tìm và thay thế trong chuỗi
var s = stringA.Replace("chào", "CHÀO"); // "Xin CHÀO," |
Split |
Trả về mảng các chuỗi con được chia từ chuỗi gốc bởi ký tự chia chỉ định, chuỗi chia chỉ định
var s = "Nguyễn Văn A".Split(' '); // s tương đương mảng {"Nguyễn","Văn", "A"} |
ToLower |
Sinh chuỗi mới bằng cách chuyển các ký tự thành chữ thường |
ToUpper |
Sinh chuỗi mới bằng cách chuyển các ký tự thành chữ in |
Trim |
Sinh chuỗi mới bằng cách loại bỏ khoảng trắng (hoặc chỉ định) ở đầu và cuối |
Substring |
Lấy ra chuỗi con từ chuỗi chính - chuỗi con lấy từ vị trí chỉ ra đến cuối hoặc theo độ dài
string s = stringA.Substring(4); // s = "chào," string x = stringA.Substring(0, 3); // s = "Xin" (dài 3) |
Sử dụng StringBuilder
Khi sử dụng biến kiểu string
để thực hiện các thao tác nhằm mục đích cuối cùng thu được
chuỗi theo yêu cầu, trong quá trình đó bạn có thể sử dụng nhiều biến kiểu string
,
để phục vụ các phép toán như nối chuỗi, tìm kiếm, thay thế ... Mỗi khi khởi tạo một biến kiểu string,
bạn đã cấp phát một lượng bộ nhớ để lưu trữ chuỗi - thường thì bộ nhớ này nhiều hơn những gì bạn cần.
Để thi hành tối ưu hơn về tốc độ, về sử dụng bộ nhớ có thể dùng tới đối tượng StringBuilder
ở namespace System.Text
(thêm vào đầu file using System.Text;
)
StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("Xin chào các bạn - xuanthulab.net"); stringBuilder.Replace("Xin chào", "XIN CHÀO"); Console.WriteLine(stringBuilder); // Out: XIN CHÀO các bạn - xuanthulab.net
Một số phương thức khi sử dụng StringBuilder
method | Sử dụng |
---|---|
Append |
Nối một đối tượng (chuỗi, số ...) vào StringBuilder |
AppendFormat |
Nối vào một chuỗi sinh ra theo StringFormat |
Insert |
Chèn vào StringBuilder một chuỗi ở vị trí chỉ ra |
Remove |
Loại bỏ một lượng ký tự, bắt đầu từ vị trí do chỉ định |
Replace |
Tìm và thay thế |
ToString |
Trả về chuỗi (String) |
Dùng biểu thức chính quy với chuỗi trong C#
Khi làm việc với chuỗi, những tác vụ phức tạp muốn nhanh chóng có thể áp dụng kỹ thuật biểu thức chính quy vì C# hỗ trợ các lớp để làm việc với RegExp (regularexpressions), phần này trình bày ở một bài riêng
Ví dụ xây dựng lại hàm tìm kiếm địa chỉ email có trong một văn bản, ví dụ này đã từng xây dựng trong PHP: RegEx tìm email
String text = @"Đây là địa chỉ email userabcguest@xuanthulab.net.vn và xyz@gmail.com cần trích xuất"; String pattern = @"(([^\s.]+)@((.[^\s]+)(\..[^\s]+)))"; Regex rx = new Regex(pattern); // Tìm kiếm. MatchCollection matches = rx.Matches(text); // In thông báo tìm kiếm. Console.WriteLine("Tìm thấy {0} email trong:\n\n {1}\n\n", matches.Count, text); // Xuất kết quả email tìm được foreach (Match match in matches) { GroupCollection groups = match.Groups; Console.WriteLine("{0}", groups[0].Value); }
Kết quả chạy
Tìm thấy 2 email trong: Đây là địa chỉ email userabcguest@xuanthulab.net.vn và xyz@gmail.com cần trích xuất userabcguest@xuanthulab.net.vn xyz@gmail.com
Mã nguồn CS012_String(Git), hoặc tải ex012-1