Guava CharMatcher 源碼分析

CharMatcher

CharMatcher提供了多種對字符串處理的方法,大概分爲找到匹配的字符串和處理匹配的字符串兩種。其中內部實現了大量的公用內部類,用來方便用戶對字符串進行匹配,並且實現了大量處理字符串的方法。

CharMatcher本身是一個抽象類,也有一些抽象方法,它主要依靠內部繼承ChatMatcher的內部子類來是想抽象方法和重寫一些方法。

1. 內部實現類

CharMatcher的內部實現類可以進行字符串的匹配。

// 以JavaDigital爲例
// 匹配Unicode數字
// 1. 靜態工廠,返回JavaDigital實例
public static CharMatcher javaDigit() {
    return JavaDigit.INSTANCE;
}
// 2. 靜態常量,初始化調用1
public static final CharMatcher JAVA_DIGIT = javaDigit();

// 實現
private static final class JavaDigit extends CharMatcher {
    
    static final JavaDigit INSTANCE = new JavaDigit();

    @Override
    public boolean matches(char c) {
        return Character.isDigit(c);
    }

    @Override
    public String toString() {
        return "CharMatcher.javaDigit()";
    }
}

/**
 * CharMatcher的內部類均採用以上形式實現以及調用
 */
ANY: 匹配任何字符
ASCII: 匹配是否是ASCII字符
BREAKING_WHITESPACE: 匹配所有可換行的空白字符(不包括非換行空白字符,例如"\u00a0")
DIGIT: 匹配ASCII數字 
INVISIBLE: 匹配所有看不見的字符
JAVA_ISO_CONTROL: 匹配ISO控制字符, 使用 Charater.isISOControl() 實現
JAVA_LETTER: 匹配字母, 使用 Charater.isLetter() 實現
JAVA_LETTER_OR_DIGET: 匹配數字或字母
JAVA_LOWER_CASE: 匹配小寫
JAVA_UPPER_CASE: 匹配大寫
NONE: 不匹配所有字符
SINGLE_WIDTH: 匹配單字寬字符, 如中文字就是雙字寬
WHITESPACE: 匹配所有空白字符

常用操作方法

CharMatcher提供了一些對字符串進行處理的方法。

// 返回匹配指定字符match的Matcher
CharMatcher is(char match);

// 返回不匹配指定字符match的Matcher
CharMatcher isNot(char match);

// 返回匹配sequence中任意字符的Matcher
CharMatcher anyOf(CharSequence sequence);

// 返回不匹配sequence中任何一個字符的Matcher
CharMatcher noneOf(CharSequence sequence);

// 返回匹配範圍內任意字符的Matcher
CharMatcher inRange(char startInclusive, char endIncludesive);

// 返回使用predicate的apply()判斷匹配的Matcher
CharMatcher forPredicate(Predicate<? super Charater> predicate);

// 返回以當前Matcher判斷規則相反的Matcher
CharMatcher negate();

// 返回與other匹配條件組合做與來判斷的Matcher
CharMatcher and(CharMatcher other);

// 返回與other匹配條件組合做或來判斷的Matcher
CharMatcher or(CharMatcher other);

// 只要sequence中有任意字符能匹配Matcher,返回true
boolean matchesAnyOf(CharSequence sequence);

// 如果sequence中所有字符都能匹配Matcher,返回true
boolean matchesAllOf(CharSequence sequence);

//  如果sequence中所有字符都不能匹配Matcher,返回true
boolean matchesNoneOf(CharSequence sequence);

// 返回sequence中匹配到的第一個字符的下標
int indexIn(CharSequence sequence);

// 返回從start開始,在sequence中匹配到的第一個字符的下標
int indexIn(CharSequence sequence, int start);

// 返回sequence中最後一次匹配到的字符下標
int lastIndexIn(CharSequence sequence);

// 返回sequence中匹配到的字符總數
int countIn(CharSequence sequence);

// 刪除sequence中匹配到的字符並返回
String removeFrom(CharSequence sequence);

// 保留sequence中匹配到的字符並返回
String retainFrom(CharSequence sequence);

// 替換sequence中匹配到的字符並返回
String replaceFrom(CharSequence sequence, char replacement);

// 刪除sequence首尾匹配到的字符並返回
String trimFrom(CharSequence sequence)

// 刪除sequence首部匹配到的字符
String trimLeadingFrom(CharSequence sequence);

// 刪除sequence尾部匹配到的字符
String trimTrailingFrom(CharSequence sequence);

// 將經過匹配的sequence替換成replacement 
String collapseFrom(CharSequence sequence, char replacement);

// 將sequence先trim再replace
String trimAndCollapseFrom(CharSequence sequence, char replacement);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章