1. Phương thức length(): có bao nhiêu ký tự trong chuỗi?
Phương thức length() trả về số lượng ký tự trong chuỗi. Điều này không hoàn toàn giống “số byte” (đặc biệt nếu chuỗi có emoji hoặc các ký tự Unicode), nhưng với hầu hết bài toán — đó chính là thứ bạn cần.
Ví dụ sử dụng
String name = "Vasilisa";
int length = name.length();
System.out.println("Số chữ cái trong tên: " + length); // 8
Để làm gì
- Kiểm tra người dùng có nhập chuỗi rỗng hay không.
- Kiểm tra độ dài tối thiểu/tối đa của mật khẩu.
- Biết còn bao nhiêu ký tự đến giới hạn (ví dụ trong SMS hoặc tweet).
Ví dụ: kiểm tra chuỗi rỗng
String input = "";
if (input.length() == 0)
{
System.out.println("Chuỗi trống!");
}
Mẹo: để kiểm tra chuỗi “trống” còn có phương thức isEmpty(), nhưng sẽ bàn đến sau.
FAQ ngắn
- Phương thức length() không nhận tham số (ngoặc luôn rỗng).
- Nếu chuỗi chỉ gồm khoảng trắng, chúng cũng được tính là ký tự!
- Nếu chuỗi là null, gọi length() sẽ dẫn đến NullPointerException — hãy kiểm tra null trước.
2. Phương thức substring(): trích xuất một phần chuỗi
Phương thức substring() cho phép lấy chuỗi con — “cắt” một đoạn theo chỉ số cho trước.
Có hai dạng gọi chính:
- str.substring(startIndex) — từ vị trí startIndex đến hết chuỗi.
- str.substring(startIndex, endIndex) — từ vị trí startIndex đến endIndex (KHÔNG bao gồm ký tự tại chỉ số endIndex).
Lưu ý: chỉ số ký tự trong chuỗi bắt đầu từ 0.
Ví dụ sử dụng
Ví dụ 1: Lấy 3 chữ cái đầu của tên
String name = "Vasilisa";
String firstThree = name.substring(0, 3); // "Vas"
System.out.println(firstThree);
Ví dụ 2: Lấy phần mở rộng tệp
String fileName = "document.pdf";
int dotIndex = fileName.indexOf(".");
String extension = fileName.substring(dotIndex + 1); // "pdf"
System.out.println(extension);
Ví dụ 3: 4 ký tự cuối của chuỗi
String cardNumber = "1234567890123456";
String lastFour = cardNumber.substring(cardNumber.length() - 4); // "3456"
System.out.println("4 chữ số cuối: " + lastFour);
Đặc điểm và lưu ý
- Chỉ số không hợp lệ (startIndex < 0, endIndex > length, startIndex > endIndex) sẽ ném StringIndexOutOfBoundsException.
- Phương thức luôn trả về một chuỗi mới — chuỗi gốc không thay đổi.
- Dạng thứ hai (với hai tham số) không bao gồm ký tự tại chỉ số endIndex.
String str = "abcdef";
// Chỉ số: 0 1 2 3 4 5
str.substring(1, 4) → "bcd" // các ký tự có chỉ số 1, 2, 3
substring(start, end)
3. Phương thức indexOf(): tìm ký tự hoặc chuỗi con
Phương thức indexOf() tìm vị trí (chỉ số) lần xuất hiện đầu tiên của ký tự hoặc chuỗi con đã cho.
- Nếu tìm thấy — trả về chỉ số (tính từ 0).
- Nếu không tìm thấy — trả về -1.
Ví dụ sử dụng
Ví dụ 1: Tìm dấu chấm đầu tiên trong email
String email = "ivan.petrov@mail.com";
int dotIndex = email.indexOf('.');
System.out.println("Dấu chấm đầu tiên ở vị trí: " + dotIndex); // 4
Ví dụ 2: Tìm chuỗi con
String text = "Tôi yêu Java!";
int index = text.indexOf("Java");
System.out.println(index); // 8
Ví dụ 3: Tìm ký tự sau một vị trí nhất định
String s = "abracadabra";
int firstA = s.indexOf('a'); // 0
int secondA = s.indexOf('a', firstA + 1); // 3
System.out.println("Chữ 'a' thứ hai ở vị trí: " + secondA);
Đặc điểm và lưu ý
- Nếu ký tự/chuỗi con xuất hiện nhiều lần, sẽ trả về vị trí lần xuất hiện đầu tiên.
- Để tìm lần xuất hiện cuối cùng, dùng lastIndexOf().
- Với ký tự dùng dấu nháy đơn: 'a'; với chuỗi dùng dấu nháy kép: "abc".
Ví dụ: tìm phần mở rộng tệp
String fileName = "report.final.version.docx";
int lastDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastDot + 1);
System.out.println("Phần mở rộng tệp: " + extension); // "docx"
4. Phương thức charAt(): lấy ký tự theo chỉ số
Phương thức charAt(index) trả về ký tự của chuỗi tại chỉ số tương ứng.
Ví dụ sử dụng
Ví dụ 1: Kiểm tra chữ cái đầu của chuỗi
String city = "Minsk";
char first = city.charAt(0); // 'M'
System.out.println("Chữ cái đầu: " + first);
Ví dụ 2: Kiểm tra chuỗi có bắt đầu bằng chữ hoa hay không
String word = "Java";
if (Character.isUpperCase(word.charAt(0)))
{
System.out.println("Từ bắt đầu bằng chữ hoa!");
}
Ví dụ 3: Duyệt toàn bộ ký tự của chuỗi
String text = "Xin chào";
for (int i = 0; i < text.length(); i++)
{
System.out.println("Ký tự #" + i + ": " + text.charAt(i));
}
Đặc điểm và lưu ý
- Chỉ số ngoài phạm vi (ví dụ -1 hoặc >= length) sẽ dẫn đến StringIndexOutOfBoundsException.
- Phương thức trả về giá trị kiểu char, không phải chuỗi.
5. Phương thức toCharArray(): chuyển chuỗi thành mảng ký tự
Phương thức toCharArray() — cách đơn giản để chuyển chuỗi thành mảng ký tự (char[]). Hữu ích cho xử lý từng ký tự, sắp xếp, kiểm tra, v.v.
Ví dụ sử dụng:
String text = "Hello";
char[] characters = text.toCharArray();
for (char c : characters)
{
System.out.println(c);
}
// Kết quả:
// H
// e
// l
// l
// o
Để làm gì:
- Xử lý ký tự: mảng thuận tiện cho logic từng ký tự (ví dụ kiểm tra anagram).
- Tương thích: một số API kỳ vọng char[] làm tham số.
6. Phương thức replace(): thay thế chuỗi con
Phương thức replace(CharSequence target, CharSequence replacement) thay thế tất cả lần xuất hiện của chuỗi con target bằng replacement. Trả về một chuỗi mới, chuỗi gốc không thay đổi.
Ví dụ sử dụng:
String sentence = "Tôi yêu lập trình bằng Java.";
String newSentence = sentence.replace("Java", "Java 25");
System.out.println(newSentence);
// Kết quả: Tôi yêu lập trình bằng Java 25.
String email = "support@company.com";
String cleanEmail = email.replace("@", "[at]");
System.out.println(cleanEmail);
// Kết quả: support[at]company.com
Đặc điểm và lưu ý
- Thay thế tất cả lần xuất hiện.
- String là bất biến: replace() trả về chuỗi mới.
- Với quy tắc phức tạp, dùng replaceAll() với biểu thức chính quy.
7. Các phương thức trim() và strip(): loại bỏ khoảng trắng
Cả hai phương thức đều loại bỏ các ký tự “vô hình” ở đầu và cuối chuỗi.
- trim() — phương thức cổ điển: xóa khoảng trắng, tab, xuống dòng và một phần ký tự điều khiển, nhưng không phải mọi khoảng trắng Unicode.
- strip() — phương thức hiện đại: tính đến mọi loại khoảng trắng theo chuẩn Unicode. Ưu tiên dùng trong các dự án mới.
Ví dụ sử dụng:
String s1 = " Xin chào, thế giới! ";
System.out.println(s1.trim());
// Kết quả: "Xin chào, thế giới!"
String s2 = " \u2005 Java 11 \u2005 "; // \u2005 — là khoảng trắng Unicode
System.out.println("trim(): " + s2.trim());
System.out.println("strip(): " + s2.strip());
// Kết quả:
// trim(): Java 11
// strip(): Java 11
Để làm gì:
- Dọn sạch dữ liệu nhập của người dùng khỏi khoảng trắng thừa.
- Chuẩn hóa dữ liệu từ tệp/log trước khi xử lý.
8. Thực hành: giải bài tập
Bài 1: Kiểm tra độ dài mật khẩu
String password = "qwerty";
if (password.length() < 8)
{
System.out.println("Mật khẩu quá ngắn!");
}
else
{
System.out.println("Mật khẩu phù hợp.");
}
Bài 2: Trích xuất tên từ Họ Tên
String fullName = "Nguyen Van An";
int firstSpace = fullName.indexOf(' ');
String name = fullName.substring(firstSpace + 1, fullName.indexOf(' ', firstSpace + 1));
System.out.println("Tên: " + name); // "Van"
Bài 3: Kiểm tra chuỗi bắt đầu bằng một chữ cái nhất định
String surname = "Petrov";
if (surname.charAt(0) == 'P')
{
System.out.println("Họ bắt đầu bằng chữ P");
}
Bài 4: Lấy tên miền từ email
String email = "vasya.pupkin@gmail.com";
int at = email.indexOf('@');
String domain = email.substring(at + 1);
System.out.println("Tên miền: " + domain); // "gmail.com"
Bài 5: Tìm tất cả vị trí xuất hiện của chữ 'a' trong chuỗi
String s = "abracadabra";
int pos = s.indexOf('a');
while (pos != -1)
{
System.out.println("Chữ 'a' được tìm thấy tại vị trí: " + pos);
pos = s.indexOf('a', pos + 1); // tìm tiếp từ vị trí vừa tìm thấy
}
9. Lỗi thường gặp khi làm việc với các phương thức của String
Lỗi số 1: Vượt quá giới hạn chuỗi
Rất hay nhầm lẫn chỉ số và truy cập ký tự/chuỗi con không tồn tại.
String s = "Java";
char c = s.charAt(4); // Lỗi! Chỉ số 0..3
String s = "Hello";
String sub = s.substring(3, 10); // Lỗi! Độ dài chuỗi — 5
Lỗi số 2: Nhầm lẫn giữa bao gồm/không bao gồm chỉ số
Phương thức substring(start, end) bao gồm ký tự tại chỉ số start, nhưng KHÔNG bao gồm ký tự tại chỉ số end.
Lỗi số 3: Kỳ vọng indexOf trả về thứ khác -1 khi không có chuỗi con
Hãy kiểm tra kết quả trước khi dùng, đặc biệt nếu bạn dùng nó tiếp trong substring.
Lỗi số 4: Xử lý sai chuỗi rỗng
Nếu chuỗi rỗng (""), gọi charAt(0) hoặc substring(0, 1) sẽ gây lỗi. Hãy kiểm tra độ dài trước.
Lỗi số 5: Làm việc với chuỗi null
Nếu chuỗi là null, gọi bất kỳ phương thức nào (length(), substring(), v.v.) sẽ ném NullPointerException. Luôn kiểm tra null trước khi xử lý.
GO TO FULL VERSION