Trang chủ C# cơ bản Lớp String trong C#

Lớp String trong C#

Nguyễn Dương 07-06-2024

1. LỚP STRING TRONG C#

String là một kiểu dữ liệu tham chiếu được dùng để lưu trữ chuỗi ký tự. Trong bài viết này, chúng ta sẽ cùng tìm hiểu kỹ hơn về phương thức và các thuộc tính trong lớp String nhé.

Thuộc tính:
- Length: Trả về độ dài của một chuỗi ký tự (kiểu int)

Một số phương thức thường sử dụng:
Phương thức
Tác dụng
String.Compare(string strA, string strB)
So sánh chuỗi strA có bằng strB hay không. Nếu bằng thì trả về 0, nếu strA > strB thì trả về 1, còn lại trả về -1
String.Concat(string strA, string strB)
Nối 2 chuỗi thành một chuỗi
IndexOf(char value)
Trả về vị trí đầu tiên xuất hiện ký tự value (kiểu int). Nếu không tìm thấy thì kết quả là -1 
Insert(int startIndex, string value) 
Trả về một chuỗi mới bao gồm cả chuỗi cũ đã chèn thêm chuỗi value tại vị trí startIndex
String.IsNullOrEmpty(string strA)
Kiểm tra chuỗi strA có phải là chuỗi rỗng hoặc null hãy không. Nếu đúng thì trả về là True, ngược lại là False.
LastIndexOf(char value)
Trả về vị trí cuỗi cùng xuất hiện ký tự value trong chuỗi (kiểu int)
ToCharArray
Trả về một mảng các ký tự trong chuỗi ban đầu
ToLower()
Trả về chuỗi mới viết thường tất cả các ký tự trong chuỗi gốc
ToUpper()
Trả về chuỗi mới viết hoa tất cả các ký tự trong chuỗi gốc
Trim()
Trả về chuỗi mới đã bỏ tất cả khoảng trắng ở đầu và cuối chuối gốc
Remove(int startIndex, int count)
Trả về chuỗi mới đã loại bỏ count ký tự từ vị trí startIndex trong chuỗi gốc
Replace(char oldValue, newValue)
Trả về chuỗi mới đã thay thế ký tự oldValue bằng newValue
Split(char value)
Trả về một mảng là các chuỗi được cắt ra từ chuỗi gốc nơi có ký tự value
Subtring(int startIndex, int Length)
Trả về chuỗi mới được cắt từ vị trí startIndex của chuỗi gốc với số ký tự là Length
- Các phương thức có String ở đầu là các phương thức gọi thông qua tên lớp. Các phương thức còn lại được gọi thông qua đối tượng.
- Các phương thức khi gọi sẽ tạo ra đối tượng mới rồi thao tác trên đối tượng đó chứ không thao tác trực tiếp với đối tượng đang xét.
Ví dụ: Mình muốn cắt chữ Hello từ Hello World
string strA = "Hello World";
strA.Substring(0, 5);

Console.WriteLine(strA);

Kết quả chương trình vẫn chỉ in Hello World ra màn hình. Nếu bạn muốn chuỗi strA mang giá trị mới thì phải gán giá trị mới cho nó.
string strA = "Hello World";
strA = strA.Substring(0, 5);

Console.WriteLine(strA);

Kết quả là chỉ có chữ Hello được in ra màn hình.

2. LỚP STRINGBUILDER TRONG C#

Lớp StringBuilder được .NET xây dựng sẵn giúp lập trình viên thao tác trực tiếp với chuỗi gốc và giúp tiết kiệm bộ nhớ hơn so với lớp String.

Đặc điểm:
  • Cho phép thao tác trực tiếp trên chuỗi ban đầu
  • Có khả năng tự mở rộng vùng nhớ khi cần thiết
  • Không cho phép lớp khác kế thừa


Ta xét 2 ví dụ sau:

Ví dụ 1: Thao tác với lớp String
string strA = "Welcome to......";
strA = strA + "Quan tri may tinh";

Console.WriteLine(strA);

Nhìn vào ví dụ này, bạn sẽ thấy:
- Đầu tiên chương trình tạo 1 vùng nhớ lưu giá trị biến strA
- Tạo 1 vùng nhớ mới chứa giá trị chuỗi Quan tri may tinh
- Khi thực hiện cộng trên 2 chuỗi sẽ tạo ra 1 vùng nhớ mới nữa để chứa giá trị chuỗi mới
- Cuối cùng là thực hiện phép gán, trỏ đối tượng strA sang vùng nhớ chứa chuỗi kết quả của phép cộng
Như vậy sẽ sẽ phải tạo ra 3 vùng nhớ để thao tác.

Ví dụ 2: Thao tác với StringBuilder
StringBuilder strA = new StringBuilder("Welcome to......");
strA.Append("Quan tri may tinh");

Console.WriteLine(strA);

Kết quả cũng giống như ví dụ 1 nhưng công đoạn lưu bộ nhớ thì khác
- Đầu tiên cũng tạo 1 vùng nhớ chưa giá trị Welcome to......
- Tạo 1 vùng nhớ mới chứa giá trị Quan tri may tinh
- Mở rộng vùng nhớ của biến strA rồi cộng chuỗi thứ 2 vào.
Như vậy chỉ cần sử dụng 2 vùng nhớ là thao tác được rồi.

Cú pháp:

Khởi tạo đối tượng rỗng
StringBuilder <tên biến> = new StringBuilder();

Khởi tạo có giá trị 
StringBuilder <tên biến> = new StringBuilder(<chuỗi giá trị>);

Một số phương thức thường sử dụng:
Phương thức
Tác dụng
Append(string value)
Nối chuỗi value vào sau chuỗi ban đầu.
Clear()
Xóa bỏ toàn bộ nội dung trong đối tượng (lưu ý không xóa vùng nhớ)
ToString()
Chuyển đối tượng kiểu StringBuilder sang String
- Phương thức RemoveInsertReplace được sử dụng giống như lớp String.

Lưu ý:
- Đây là đối tượng kiểu StringBuilder nên thao tác với chuỗi như gán, nối chuỗi, . . . phải thông qua các phương thức chứ không thể thực hiện trực tiếp được.
- String và StringBuilder đều có ưu, nhược điểm riêng. Tuỳ vào từng yêu cầu của bài toán mà sử dụng cho hợp lý. 
- Thông thường đối với các bài toán đòi hỏi thao tác nhiều với chuỗi gốc như cộng chuỗi, chèn chuỗi, xoá bỏ một số ký tự thì nên sử dụng StringBuilder để tối ưu bộ nhớ.

3. VÍ DỤ THỰC HÀNH

 Đề bài: Viết chương trình nhập vào một chuỗi ký tự. Thực hiện gỡ bỏ tất cả các khoảng trắng dư thừa (khoảng trắng ở đầu và cuối, giữa các từ có nhiều hơn 1 khoảng trắng). Viết hoa chữ cái đầu tiên của mỗi từ, các từ còn lại thì viết thường.

Cách làm:
Bước 1: Khai báo biến HoTenKetQua
Bước 2: Nhập dữ liệu cho biến HoTen
Bước 3: Dùng phương thức Trim() để loại bỏ khoảng trắng dư thừa ở đầu và cuối họ tên
Bước 4: Dùng vòng lặp while và IndexOf() để loại bỏ khoảng trắng dư thừa giữa các từ
Bước 5: Dùng Split() để tạo 1 MangHoTen từ chuỗi HoTen
Bước 6: Tiến hành duyệt mảng, dùng SubString() để cắt từng ký tự một, ký tự đầu thì dùng ToUpper() để viết hoa, ký tự còn lại thì dùng ToLower() để chuyển thành viết thường. Kết quả duyệt MangHoTen được gán cho biến KetQua.

Code:

string HoTen;
string KetQua = "";

Console.Write("Moi nhap ho ten: ");
HoTen = Console.ReadLine();

HoTen = HoTen.Trim();

while (HoTen.IndexOf("  ") != -1)
{
      HoTen = HoTen.Replace("  ", " ");
}

string[] MangHoTen = HoTen.Split(' ');

for (int i = 0; i < MangHoTen.Length; i++)
{
      string KyTuDau = MangHoTen[i].Substring(0, 1);
      string KyTuSau = MangHoTen[i].Substring(1);
      MangHoTen[i] = KyTuDau.ToUpper() + KyTuSau.ToLower();
      KetQua += MangHoTen[i] + " ";
}

Console.WriteLine("Ten ban vua nhap la: " +KetQua);    

Kết quả:

Ở bước 6, bạn có thể viết ngắn gọn là:
for (int i = 0; i < MangHoTen.Length; i++)
     {
          MangHoTen[i] = MangHoTen[i].Substring(0, 1).ToUpper() + MangHoTen[i].Substring(1).ToLower();
          KetQua += MangHoTen[i] + " ";
     }

Viết theo cách 2 sẽ ngắn gọn hơn, viết theo cách 1 thì dễ nhìn dễ đọc hơn. Bạn nào chưa quen thì cứ viết theo cách 1 cho dễ hình dung.

Bài viết liên quan

Hàm đệ quy trong C# Hàm đệ quy trong C#
enum trong C# enum trong C#
Struct trong C# Struct trong C#
Lớp String trong C# Lớp String trong C#
Vòng lặp foreach trong C# Vòng lặp foreach trong C#
Mảng đa chiều, mảng của mảng trong C# Mảng đa chiều, mảng của mảng trong C#