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

Lớp ký tự POSIX \p{Graph} trong Java Regex

Lớp ký tự POSIX \p{Graph} khớp với tất cả các ký tự hiển thị được (visible characters): chữ cái, chữ số, dấu câu. Không bao gồm khoảng trắng (space) và các ký tự điều khiển.

Mối quan hệ: \p{Graph} = \p{Print} - [space]

Ví dụ 1: Đếm ký tự hiển thị

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class VisibleCharacters {
    public static void main(String args[]) {
        System.out.println("Nhập một chuỗi:");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        String regex = "[\\p{Graph}]";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("Số ký tự hiển thị: " + count);
    }
}

Kết quả mẫu 1

Nhập một chuỗi: öäü çã Ã test
Số ký tự hiển thị: 4

Chỉ đếm "test" (4 ký tự). Khoảng trắng và các ký tự Unicode Latin-1 Supplement không được tính trong ví dụ này do encoding.

Kết quả mẫu 2

Nhập một chuỗi: welcome to tutorialspoint
Số ký tự hiển thị: 23

23 = độ dài chuỗi trừ 2 khoảng trắng.

Ví dụ 2: Lọc chuỗi chỉ chứa ký tự visible

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example {
    public static void main(String args[]) {
        String regex = "^\\p{Graph}+$";

        Scanner sc = new Scanner(System.in);
        System.out.println("Nhập 5 chuỗi:");
        String[] input = new String[5];
        for (int i = 0; i < 5; i++) {
            input[i] = sc.nextLine();
        }

        Pattern p = Pattern.compile(regex);
        System.out.println("Chuỗi chỉ chứa ký tự visible (không space):");
        for (int i = 0; i < 5; i++) {
            Matcher m = p.matcher(input[i]);
            if (m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

Kết quả mẫu

Nhập 5 chuỗi:
helloöäüçãÃ
öäüçãÃ
Hello1234
1234
welcome

Chuỗi chỉ chứa ký tự visible:
Hello1234
1234
welcome

Lưu ý

  • \p{Graph} = [\p{Alnum}\p{Punct}] (alphanumeric + punctuation).
  • Khác với \p{Print}: loại bỏ space.
  • Trong Java string: "\\p{Graph}".
  • Tương tự ví dụ trước, các ký tự Unicode mở rộng có thể không khớp tùy locale/JVM.

Ứng dụng

  • Validate mật khẩu không chứa khoảng trắng: ^\p{Graph}{8,}$
  • Kiểm tra token/chuỗi không có whitespace.
  • Phân tích văn bản loại bỏ space.