Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Posix Character Class \p{Print} ใน Java Regex

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 ได้อย่างปลอดภัย