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

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

Lớp ký tự POSIX \p{Digit} khớp với các chữ số thập phân (0-9). Tương đương [0-9] hoặc \d.

Ví dụ 1: Đếm chữ số

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

public class DigitsExample {
    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{Digit}]";

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

        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("Số chữ số: " + count);
    }
}

Kết quả mẫu 1

Nhập một chuỗi: sample text 22 37 48 84
Số chữ số: 8

Kết quả mẫu 2

Nhập một chuỗi: Welcome to tutorialspoint
Số chữ số: 0

Ví dụ 2: Lọc chuỗi chỉ chứa chữ số

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{Digit}+$";

        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 chữ số:");
        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
1234
243test
##$$@
222356

Chuỗi chỉ chứa chữ số:
1234
222356

Lưu ý

  • \p{Digit} = [0-9] = \d (trong Java, \d mặc định chỉ ASCII 0-9 trừ khi dùng Pattern.UNICODE_CHARACTER_CLASS).
  • Trong Java string: "\\p{Digit}" hoặc "\\d".
  • Khác với \p{XDigit} (hex: 0-9, A-F, a-f).

Ứng dụng thực tế

  • Validate số điện thoại: ^\\d{10,11}$.
  • Validate năm: ^\\d{4}$.
  • Trích xuất tất cả số: \\d+ (xem bài "Cách trích xuất số từ chuỗi").
  • Validate chỉ chứa số: ^\\d+$.
  • Kiểm tra OTP 6 số: ^\\d{6}$.

So sánh \d, \p{Digit}, [0-9]

Biểu thứcUnicode mode?Khớp
\dKhông (mặc định)0-9 ASCII
\dCó (Pattern.UNICODE_CHARACTER_CLASS)Tất cả chữ số Unicode (Devanagari, Arabic, Chinese...)
\p{Digit}Không/CóTương tự \d theo mode
[0-9]LuônChỉ 0-9 ASCII

Khuyến nghị: Dùng [0-9] khi chắc chắn chỉ xử lý ASCII digit để tránh sự nhầm lẫn về Unicode mode.