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

Cách kiểm tra String chỉ chứa ký tự ASCII trong Java

Cách 1: Regex \\A\\p{ASCII}*\\z (Ngắn gọn)

\\A: đầu string, \\z: cuối string, \\p{ASCII}: ký tự ASCII (0-127), *: 0 hoặc nhiều lần.

import java.util.Scanner;

public class CheckASCII {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String input = sc.nextLine();
        
        boolean isASCII = input.matches("\\A\\p{ASCII}*\\z");
        
        if (isASCII) {
            System.out.println("String approved - chỉ chứa ASCII");
        } else {
            System.out.println("Contains non-ASCII values");
        }
    }
}
Nhập chuỗi: hello how are you
String approved - chỉ chứa ASCII

Nhập chuỗi: whÿ do we fall
Contains non-ASCII values

Cách 2: Kiểm tra từng ký tự (Unicode code point <= 127)

public class CheckASCIIManual {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String input = sc.nextLine();
        
        boolean isASCII = true;
        for (int i = 0; i < input.length(); i++) {
            int codePoint = input.codePointAt(i); // Hỗ trợ surrogate pair (emoji, ký tự đặc biệt)
            if (codePoint > 127) {
                isASCII = false;
                break;
            }
        }
        
        System.out.println(isASCII ? "ASCII only" : "Non-ASCII found");
    }
}

So sánh

CáchƯu điểmNhược điểm
Regex matches()Ngắn, dễ đọc, built-inTạo Pattern object mỗi lần (chậm nếu lặp nhiều)
Duyệt codePointKiểm soát chi tiết, nhanh nếu break sớmCode dài hơn
Pre-compiled PatternHiệu suất cao cho lặp nhiềuCần cache Pattern object

Best practice cho high-performance

private static final Pattern ASCII_PATTERN = Pattern.compile("\\A\\p{ASCII}*\\z");

public static boolean isASCII(String s) {
    return ASCII_PATTERN.matcher(s).matches();
}

Lưu ý: ASCII = 0-127. Extended ASCII (128-255) KHÔNG phải ASCII chuẩn. Unicode > 127.