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

Character Class \p{javaUpperCase} ใน Java Regex

Character Class \p{javaUpperCase} จับคู่ตัวอักษรที่ Character.isUpperCase(char) คืนค่า true คือ ตัวอักษรพิมพ์ใหญ่ตาม Java definition (Unicode category Lu + Lt)

ตัวอย่าง 1: นับตัวพิมพ์ใหญ่

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

public class RegexExample {
    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{javaUpperCase}]";
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("Number of uppercase characters: " + count);
    }
}

ผลลัพธ์

Enter a string: This IS A sample TExt
Number of uppercase characters: 6

ตัวอย่าง 2: หาสตริงที่ประกอบด้วยตัวพิมพ์ใหญ่เท่านั้น

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{javaUpperCase}+$";
        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 uppercase characters:");
        
        for (int i = 0; i < 5; i++) {
            Matcher m = p.matcher(input[i]);
            if (m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

ผลลัพธ์

Enter 5 input strings:
Raju
RAMU
rahman
radha
SUnDar*

Strings with only uppercase characters:
RAMU

อธิบาย

  • \p{javaUpperCase} = Character.isUpperCase() ตรวจสอบตาม Java spec
  • รวม: A-Z (Lu) และ Titlecase letters (Lt) เช่น Dž (DZ with caron), Lj (LJ), Nj (NJ)
  • ใน "This IS A sample TExt": T, I, S, A, T, E = 6 ตัว
  • เฉพาะ "RAMU" ที่เป็นพิมพ์ใหญ่ทั้งหมด → ผ่าน
  • "SUnDar*" มี U, D พิมพ์ใหญ่ แต่มีตัวอื่น → ไม่ผ่าน ^...$

เปรียบเทียบ: \p{javaUpperCase} vs \p{Lu} vs [A-Z]

PatternStandardครอบคลุมตัวอย่างเพิ่มเติมนอก A-Z
[A-Z]ASCIIA-Z เท่านั้น-
\p{Lu}Unicode CategoryLetter, UppercaseÀ, Á, Â, Ã, Ä, Å, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ð, Ñ, Ò, Ó, Ô, Õ, Ö, Ø, Ù, Ú, Û, Ü, Ý, Þ, Α, Β, Γ, А, Б, В...
\p{javaUpperCase}Java Character.isUpperCase()Lu + Lt (Titlecase)เหมือน Lu + Dž, Lj, Nj (Titlecase)

Java Character Methods ที่เกี่ยวข้อง

  • Character.isUpperCase(char) - deprecated (ใช้ int codePoint)
  • Character.isUpperCase(int codePoint) - แนะนำ
  • Character.toUpperCase(char) / toUpperCase(int)
  • Character.getType(int codePoint) == Character.UPPERCASE_LETTER (Lu)
  • Character.getType(int codePoint) == Character.TITLECASE_LETTER (Lt)

การใช้งาน

  • Validation: ชื่อตัวแปร, class names (PascalCase)
  • Text analysis: นับตัวพิมพ์ใหญ่ในเอกสารหลายภาษา
  • i18n: รองรับตัวพิมพ์ใหญ่ทุกภาษา ไม่ใช่แค่ ASCII