Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Tìm ký tự trong chuỗi Java: indexOf() vs toCharArray()

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ạpO(n)O(n)
Code1 dòng5-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);
}