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,\dmặc định chỉ ASCII 0-9 trừ khi dùngPattern.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ức | Unicode mode? | Khớp |
|---|---|---|
\d | Không (mặc định) | 0-9 ASCII |
\d | Có (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ôn | Chỉ 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.