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

CharMatcher Class ใน Java (Guava Library)

CharMatcher เป็นคลาสใน Google Guava Library (com.google.common.base) ใช้สำหรับจัดการตัวอักษร (char) อย่างมีประสิทธิภาพ คล้ายกับ Predicate<Character> แต่ทำงานกับ primitive char โดยตรง เร็วกว่าและสะดวกกว่า

เมธอดหลักของ CharMatcher

เมธอด คำอธิบาย
and(CharMatcher other) รวมเงื่อนไข AND - match ตัวอักษรที่ทั้งคู่ match
or(CharMatcher other) รวมเงื่อนไข OR - match ตัวอักษรที่ตัวใดตัวหนึ่ง match
negate() กลับเงื่อนไข - match ตัวอักษรที่ไม่ match เดิม
anyOf(CharSequence sequence) สร้าง matcher ที่ match ตัวอักษรใดๆ ใน sequence ที่กำหนด
noneOf(CharSequence sequence) สร้าง matcher ที่ match ตัวอักษรที่ไม่อยู่ใน sequence
matches(char c) ตรวจสอบว่าตัวอักษร c match หรือไม่
matchesAllOf(CharSequence sequence) ตรวจสอบว่าทุกตัวอักษรใน sequence match หรือไม่
matchesAnyOf(CharSequence sequence) ตรวจสอบว่ามีตัวอักษรใด match หรือไม่
matchesNoneOf(CharSequence sequence) ตรวจสอบว่าไม่มีตัวอักษรไหน match
countIn(CharSequence sequence) นับจำนวนตัวอักษรที่ match
indexIn(CharSequence sequence) หา index แรกที่ match (คืน -1 หากไม่เจอ)
lastIndexIn(CharSequence sequence) หา index สุดท้ายที่ match
removeFrom(CharSequence sequence) ลบตัวอักษรที่ match ทั้งหมด
retainFrom(CharSequence sequence) เก็บเฉพาะตัวอักษรที่ match
replaceFrom(CharSequence sequence, char replacement) แทนที่ตัวอักษรที่ match ด้วย replacement character
replaceFrom(CharSequence sequence, CharSequence replacement) แทนที่ตัวอักษรที่ match ด้วย string
trimFrom(CharSequence sequence) ตัดตัวอักษรที่ match ออกจาก ראש/ท้าย
trimLeadingFrom(CharSequence sequence) ตัดตัวอักษรที่ match ออกจากหน้า
trimTrailingFrom(CharSequence sequence) ตัดตัวอักษรที่ match ออกจากท้าย
collapseFrom(CharSequence sequence, char replacement) รวมกลุ่มตัวอักษรที่ match ติดกันเป็น replacement char เดียว
trimAndCollapseFrom(CharSequence sequence, char replacement) trim + collapse

Predefined CharMatchers (พร้อมใช้งาน)

Constant Match
CharMatcher.ANY ทุกตัวอักษร
CharMatcher.NONE ไม่มีตัวอักษรไหน
CharMatcher.WHITESPACE Whitespace (\t, \n, \r, space, etc.)
CharMatcher.BREAKING_WHITESPACE Whitespace ที่ทำให้ line break
CharMatcher.DIGIT Digits (0-9)
CharMatcher.JAVA_DIGIT Java digits (รวม Unicode digits)
CharMatcher.JAVA_LETTER Java letters (รวม Unicode letters)
CharMatcher.JAVA_LETTER_OR_DIGIT Java letters หรือ digits
CharMatcher.JAVA_LOWER_CASE Java lowercase
CharMatcher.JAVA_UPPER_CASE Java uppercase
CharMatcher.INVISIBLE Invisible/control characters
CharMatcher.SINGLE_WIDTH Single-width characters
CharMatcher.ASCII ASCII characters

ตัวอย่างการใช้งาน

import com.google.common.base.CharMatcher;

public class GuavaTester {
    public static void main(String[] args) {
        // 1. retainFrom - เก็บเฉพาะ digits
        System.out.println(CharMatcher.DIGIT.retainFrom("mahesh123")); 
        // Output: 123

        // 2. trimAndCollapseFrom - trim whitespace และ collapse เป็น single space
        System.out.println(CharMatcher.WHITESPACE.trimAndCollapseFrom(" Mahesh Parashar ", ' '));
        // Output: Mahesh Parashar

        // 3. replaceFrom - แทนที่ digits ด้วย *
        System.out.println(CharMatcher.JAVA_DIGIT.replaceFrom("mahesh123", "*"));
        // Output: mahesh***

        // 4. or + retainFrom - เก็บเฉพาะ digits หรือ lowercase
        System.out.println(CharMatcher.JAVA_DIGIT.or(CharMatcher.JAVA_LOWER_CASE).retainFrom("mahesh123"));
        // Output: mahesh123

        // 5. negate + removeFrom - ลบ non-ASCII
        System.out.println(CharMatcher.ASCII.negate().removeFrom("Héllo Wörld"));
        // Output: Hllo Wrld

        // 6. countIn - นับ
        System.out.println("Digits count: " + CharMatcher.DIGIT.countIn("abc123def456"));
        // Output: Digits count: 6

        // 7. indexIn - หาตำแหน่ง
        System.out.println("First digit at: " + CharMatcher.DIGIT.indexIn("abc123"));
        // Output: First digit at: 3
    }
}

Output

123
Mahesh Parashar
mahesh***
mahesh123
Hllo Wrld
Digits count: 6
First digit at: 3

การติดตั้ง Guava (Maven/Gradle)

<!-- Maven -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>33.0.0-jre</version> <!-- ตรวจสอบ version ล่าสุด -->
</dependency>

// Gradle
implementation 'com.google.guava:guava:33.0.0-jre'

ทำไมควรใช้ CharMatcher แทน Regex/String methods?

  • Performance: Optimized สำหรับ char operations เร็วกว่า regex มาก
  • Readability: API ชัดเจน เช่น CharMatcher.DIGIT.retainFrom(s) vs s.replaceAll("\\D", "")
  • Composability: รวม matcher ได้ง่ายด้วย and(), or(), negate()
  • Unicode support: รองรับ Unicode categories ครบถ้วน
  • Null-safe: จัดการ null input ได้อย่าง graceful