Character class \p{Print} ใช้ match printable characters คือ ตัวอักษรที่สามารถพิมพ์/แสดงผลได้ รวมถึง:
- ตัวอักษร (Letters): a-z, A-Z และ Unicode letters
- ตัวเลข (Digits): 0-9
- Punctuation marks: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
- Space: regular space (แต่ ไม่รวม control characters เช่น \t, \n, \r)
- Symbols: +, -, =, *, /, \, |, etc.
ไม่รวม: Control characters (ASCII 0-31, 127), Non-printable Unicode characters
ตัวอย่างที่ 1: นับจำนวน printable characters
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PrintableCharacters {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string:");
String input = sc.nextLine();
String regex = "\\p{Print}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("Number of printable characters: " + count);
}
}
Output 1
Enter a string test Number of printable characters: 4
Output 2
Enter a string öäüçãà Number of printable characters: 0
หมายเหตุ: ตัวอักษรอักขระพิเศษบางตัวอาจไม่ถูกจัดว่าเป็น printable ในบาง locale/implementation
ตัวอย่างที่ 2: หาสตริงที่ประกอบด้วย printable characters เท่านั้น
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
// Regex: เริ่มจบด้วย printable characters เท่านั้น
String regex = "^\\p{Print}+$";
Scanner sc = new Scanner(System.in);
System.out.println("Enter 5 input strings:");
String[] input = new String[5];
for (int i = 0; i < 5; i++) {
input[i] = sc.nextLine();
}
Pattern p = Pattern.compile(regex);
System.out.println("Strings with only printable characters:");
for (int i = 0; i < 5; i++) {
Matcher m = p.matcher(input[i]);
if (m.matches()) {
System.out.println(m.group());
}
}
}
}
Output
Enter 5 input strings: helloöäüçãà öäüçãà Hello1234 1234 welcome Strings with only printable characters: Hello1234 1234 welcome
ความแตกต่าง \p{Print} vs \p{Graph} vs \s
| Class | รวม | ไม่รวม |
|---|---|---|
\p{Print} |
Printable chars + Space | Control chars (\t, \n, \r, etc.) |
\p{Graph} |
Visible chars (Print - Space) | Space + Control chars |
\s |
Whitespace (\t, \n, \r, space, etc.) | Visible characters |
กรณีใช้งาน
- Validate input ไม่ให้มี control characters:
^\\p{Print}*$ - Sanitize log output
- Check ว่าสตริงสามารถแสดงผลบน terminal ได้อย่างปลอดภัย