Kiểm tra sự tồn tại của một ký tự trong chuỗi.
Cách 1: indexOf(char/int) – Khuyên dùng
String str = "Tutorialspoint";
char target = 't';
int pos = str.indexOf(target); // 0-based, trả về -1 nếu không có
boolean found = pos != -1;
- Trả về index đầu tiên tìm thấy
- Overload:
indexOf(int ch)(code point),indexOf(String) - Có
lastIndexOf()tìm từ cuối
Cách 2: toCharArray() + loop – Thủ công, hiểu bản chất
char[] arr = str.toCharArray();
boolean found = false;
for (char c : arr) {
if (c == target) { found = true; break; }
}
Ví dụ tương tác
import java.util.Scanner;
public class FindCharInString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Nhập chuỗi: ");
String str = sc.nextLine();
System.out.print("Nhập ký tự tìm: ");
char ch = sc.nextLine().charAt(0);
// Cách 1
int idx = str.indexOf(ch);
System.out.println("indexOf: " + (idx >= 0 ? "Tìm thấy tại " + idx : "Không thấy"));
// Cách 2
boolean found = false;
for (char c : str.toCharArray()) {
if (c == ch) { found = true; break; }
}
System.out.println("Loop: " + (found ? "Tìm thấy" : "Không thấy"));
}
}
Kết quả
Nhập chuỗi: Tutorialspoint
Nhập ký tự tìm: t
indexOf: Tìm thấy tại 0
Loop: Tìm thấy
So sánh
| Tiêu chí | indexOf() | toCharArray() loop |
|---|---|---|
| Độ phức tạp | O(n) | O(n) |
| Code | 1 dòng | 5-6 dòng |
| Tìm tất cả vị trí | Loop indexOf(ch, fromIndex) | Dễ dàng collect indices |
| Unicode (code point > 0xFFFF) | indexOf(int codePoint) | char[] không đủ (cần codePointAt) |
Tìm TẤT CẢ vị trí
List<Integer> positions = new ArrayList<>();
for (int i = str.indexOf(ch); i >= 0; i = str.indexOf(ch, i + 1)) {
positions.add(i);
}