Lớp ký tự POSIX \p{Punct} khớp với các dấu câu (punctuation marks) trong ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Ví dụ 1: Đếm dấu câu
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AlphanumericExample {
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{Punct}]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("Số dấu câu: " + count);
}
}
Kết quả mẫu
Nhập một chuỗi: Hello, how are you. Welcome to Tutorialspoint. Số dấu câu: 3
Ba dấu câu: , . .
Ví dụ 2: Lọc chuỗi chỉ chứa dấu câu
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{Punct}+$";
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 dấu câu:");
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 123text.!! !!!!! ..!!,, Chuỗi chỉ chứa dấu câu: !!!!! ..!!,,
Lưu ý
\p{Punct}chỉ bao gồm dấu câu ASCII. Không bao gồm dấu câu Unicode (ví dụ:「」、『』、…、。、、trong tiếng Nhật).- Trong Java string:
"\\p{Punct}". - Kết hợp hữu ích:
[\p{Alnum}\p{Punct}]=\p{Graph}(visible chars).
Ứng dụng thực tế
- Đếm số dấu câu trong văn bản để phân tích ngôn ngữ tự nhiên (NLP).
- Validate chuỗi không chứa dấu câu:
^[^\p{Punct}]+$. - Tách câu dựa trên dấu câu kết thúc (
[\.!?]). - Làm sạch dữ liệu: loại bỏ dấu câu
input.replaceAll("\\p{Punct}", "").