Skip to main content

✍️ Ghi Tên Lên Ly - Xử Lý Chuỗi (String)

Trong quán cà phê, chúng ta dùng chữ viết ở khắp mọi nơi: ghi tên khách hàng lên ly, viết tên món trong menu, in hóa đơn... Trong Java, tất cả những dòng chữ đó được gọi là String.

🎯 Món Ăn Hôm Nay

Hôm nay, chúng ta sẽ học cách làm việc với String - kiểu dữ liệu dùng để biểu diễn văn bản. Tưởng tượng String như là tên khách hàng mà bạn dùng bút lông ghi lên thành ly cà phê. Bạn có thể đọc nó, viết nó, viết hoa để gọi cho to, hoặc kiểm tra xem tên có dài quá không.

☕ String Là Gì?

String = Một chuỗi các ký tự, hay đơn giản là một đoạn văn bản.

Trong Java, một khi một String đã được tạo ra, nó không thể bị thay đổi. Giống như bạn dùng bút lông vĩnh viễn để ghi tên lên ly, bạn không thể tẩy xóa hay sửa chữa trực tiếp trên đó được. Nếu ghi sai, bạn phải lấy một cái ly mới và ghi lại từ đầu. Đây là đặc tính quan trọng gọi là tính bất biến (immutability).

// Tạo một String - Ghi tên lên ly
String customerName = "Hieu";

👨‍🍳 Câu Chuyện Trong Quán

Một khách hàng tên "Anna" đến quầy và gọi một ly "Latte nóng, ít đường". Barista cần làm gì với các đoạn văn bản này?

  1. Ghi tên "Anna" lên ly.
  2. Kiểm tra yêu cầu đặc biệt: "ít đường".
  3. Khi cà phê xong, gọi to tên khách: "ANNA!".
  4. Có thể muốn viết tắt tên nếu nó quá dài.

Tất cả những thao tác này đều là xử lý chuỗi.

📝 Công Thức "Xử Lý Chữ" (Code)

Hãy xem các phương thức phổ biến để làm việc với String.

Ví Dụ 1: Các Thao Tác Cơ Bản

String customerName = "Anna";
String order = "Latte nóng, ít đường";

// Lấy độ dài tên - Tên có bao nhiêu ký tự?
int nameLength = customerName.length(); // Kết quả: 4

// Viết hoa để gọi khách - GỌI TO
String loudName = customerName.toUpperCase(); // Kết quả: "ANNA"

// Viết thường
String lowerName = customerName.toLowerCase(); // Kết quả: "anna"

// Kiểm tra xem có yêu cầu đặc biệt không?
boolean hasSpecialRequest = order.contains("ít đường"); // Kết quả: true

🔍 Giải Thích:

  • .length(): Trả về số lượng ký tự.
  • .toUpperCase(): Tạo ra một chuỗi MỚI với tất cả ký tự viết hoa.
  • .toLowerCase(): Tạo ra một chuỗi MỚI với tất cả ký tự viết thường.
  • .contains(): Kiểm tra xem chuỗi có chứa một chuỗi con khác không.

Ví Dụ 2: "Sửa" và "Cắt" Chuỗi

Hãy nhớ rằng String là bất biến. Mọi phương thức "thay đổi" thực chất là tạo ra một chuỗi mới.

String wrongName = "Jhon";

// Sửa tên bị sai - Lấy ly mới ghi lại
String correctName = wrongName.replace("h", "o"); // Kết quả: "John"
// wrongName vẫn là "Jhon"

String longName = "Christopher";

// Lấy 3 ký tự đầu để viết tắt
String shortName = longName.substring(0, 3); // Kết quả: "Chr"

🔍 Giải Thích:

  • .replace(old, new): Tạo chuỗi mới bằng cách thay thế tất cả các ký tự old bằng new.
  • .substring(begin, end): Tạo chuỗi mới bằng cách cắt một đoạn từ vị trí begin đến trước end.

🔥 Thực Hành Trong Quán

Bài Tập 1: Tạo Mác Dán Ly

Tạo một chuỗi duy nhất để dán lên ly từ tên khách và món đồ uống. Ví dụ: "Anna - Latte".

String customer = "Anna";
String drink = "Latte";

// Nối chuỗi bằng dấu "+"
String label = customer + " - " + drink;
System.out.println(label);

Bài Tập 2: Kiểm Tra Đơn Hàng VIP

Một khách hàng là VIP nếu tên của họ là "Alex". Viết code để kiểm tra xem một khách hàng có phải là VIP không. Lưu ý quan trọng: Đừng dùng ==!

String customer1 = "Alex";
String customer2 = "Bob";

// ✅ ĐÚNG: Dùng .equals()
if (customer1.equals("Alex")) {
System.out.println(customer1 + " là khách VIP!");
}

if (!customer2.equals("Alex")) {
System.out.println(customer2 + " không phải là khách VIP.");
}

⚠️ Những Lỗi Barista Thường Gặp

Lỗi 1: So Sánh Chuỗi Bằng ==

Đây là lỗi kinh điển nhất trong Java!

  • == so sánh "địa chỉ của cái ly" (vị trí trong bộ nhớ).
  • .equals() so sánh "chữ viết trên ly" (nội dung thực sự).
String name1 = new String("Hieu");
String name2 = new String("Hieu");

// ❌ SAI
System.out.println(name1 == name2); // false (vì đây là 2 cái ly khác nhau)

// ✅ ĐÚNG
System.out.println(name1.equals(name2)); // true (vì chữ viết trên 2 ly giống nhau)

Lỗi 2: Quên Rằng String Là Bất Biến

String status = "Đang pha";

// ❌ SAI: Lệnh này không có tác dụng gì cả
status.toUpperCase();

// ✅ ĐÚNG: Phải gán kết quả cho một biến mới (hoặc chính biến cũ)
status = status.toUpperCase();
System.out.println(status); // ĐANG PHA

💡 Bí Quyết Của Barista

  1. Luôn dùng .equals(): Khi so sánh nội dung hai chuỗi, không bao giờ được dùng ==. Hãy biến nó thành phản xạ của bạn.
  2. Dùng StringBuilder khi cần nối nhiều chuỗi: Nếu bạn cần ghép một chuỗi phức tạp từ nhiều mảnh (ví dụ: tạo một hóa đơn chi tiết), dùng StringBuilder sẽ hiệu quả hơn nhiều so với việc dùng dấu + liên tục.
  3. Cẩn thận với null: Nếu một biến String có giá trị null, việc gọi bất kỳ phương thức nào trên nó (ví dụ: name.toUpperCase()) sẽ gây ra lỗi NullPointerException.

🎓 Bạn Đã Học Được

  • String dùng để lưu trữ văn bản.
  • String là bất biến (không thể thay đổi trực tiếp).
  • ✅ Các phương thức hữu ích: .length(), .toUpperCase(), .contains(), .replace(), .substring().
  • ✅ Luôn dùng .equals() để so sánh nội dung chuỗi, không dùng ==.

☕ Món Tiếp Theo

Chúng ta đã biết cách xử lý chữ viết. Giờ là lúc học cách "ghi chép sổ sách" - làm sao để đọc và ghi thông tin đơn hàng vào một file.

👉 Nhập Xuất - Ghi Sổ Đơn Hàng


💡 Lời Khuyên Cuối: Hãy coi mỗi biến String như một tờ giấy ghi chú đã được ép plastic. Bạn có thể đọc nó, sao chép nó, nhưng không thể tẩy xóa nó. Muốn thay đổi, bạn phải tạo một tờ giấy mới.