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