base.CharMatcher
Charがマッチ(当てはまる)するかどうか、
Predicate<Character>
も実装している。
単純なものでも、正規表現より読みやすいコードが書ける。
また、置き換えなど含むコードも1行で書ける。ただし、あくまでCharであって文字列ではない。
フィールド
static CharMatcher
- ANY - すべてに当てはまる
- ASCII - アスキー(127以下)に当てはまる
- BREAKING_WHITESPACE - レイアウトのフォーマットに影響する空白文字に当てはまる
- DIGIT - Unicode的に数字に当てはまる
- INVISIBLE - スペースやコントロールなど非表示の文字に当てはまる
- JAVA_DIGIT - Java的に数字に当てはまる
- JAVA_ISO_CONTROL - Java的にコントーロル文字に当てはまる
- JAVA_LETTER - Java的にレター文字に当てはまる
- JAVA_LETTER_OR_DIGIT - Java的にレター文字か数字に当てはまる
- JAVA_LOWER_CASE - Java的に小文字
- JAVA_UPPER_CASE - Java的に大文字
- NONE -どれにも当てはまらない
- SINGLE_WIDTH - 半角文字
- WHITESPACE - 空白文字
WHITESPACE
private static final String TABLE
を参照
BREAKING_WHITESPACE
WHITESPACEから以下文字を抜いたもの
\u202f NARROW NO-BREAK SPACE
\u180e MONGOLIAN VOWEL SEPARATOR
\u00a0 NO-BREAK SPACE
\u2007 FIGURE SPACE
INVISIBLE
WHITESPACEはすべて含まれる。
さらに、沢山 正確な範囲は、コード中の以下参照
public static final CharMatcher INVISIBLE = new RangesMatcher
staticメソッド
返り値 CharMatcher
特定の文字や文字列などからCharMatcherを作成
- is(char ch) - そのCharにだけマッチする
- isNot(char ch) - そのCharにだけマッチしない
- anyOf(CharSequence sequence) - その文字列のいずれかにマッチする
- noneOf(CharSequence sequence) - その文字列のいずれにもマッチしない。
- inRange(char startInclusive, char endInclusive) - 範囲の文字にマッチ('a','z')とか
- forPredicate(Predicate<? super Character> predicate) - Predicateを元にする。
メソッド
返り値 CharMatcher
- negate() - 逆になる。
- and(CharMatcher other) - 別のCharMatcherとandで結合
- or(CharMatcher other) - 別のCharMatcherとorで結合
- precomputed() - 事前に計算して速くなる。(GWTで効果なし)
返り値 boolean
- matches(char c) - charが当てはまる
- matchesAnyOf(CharSequence sequence) - どれか当てはまる
- matchesAllOf(CharSequence sequence) - すべて当てはまる
- matchesNoneOf(CharSequence sequence) - どれも当てはまらない
返り値 int
- indexIn(CharSequence sequence) - 先頭から、調べて当てはまった箇所(Index)を返す
- indexIn(CharSequence sequence,int start) - startから調べて当てはまった箇所(Index)を返す
- lastIndexIn(CharSequence sequence) - 後方から調べて当てはまった箇所(Index)を返す
- countIn(CharSequence sequence) - 当てはまったcharの回数を返す
返り値 String
此のへんがGuavaらしいですね。
- removeFrom(CharSequence sequence) - 当てはまったcharは取り除く
- retainFrom(CharSequence sequence) - 当てはまったcharだけ残る
- replaceFrom(CharSequence sequence,char replacement) - 当てはまったcharはreplacementに置き換えられる
- trimFrom(CharSequence sequence) - 前後で当てはまった場所は取り除かれる
- trimLeadingFrom(CharSequence sequence) - 前で当てはまった場所は取り除かれる
- trimTrailingFrom(CharSequence sequence) - 後ろで当てはまった場所は取り除かれる
- collapseFrom(CharSequence sequence,char replacement) - 当てはまったcharはreplacementに置き換えられる。連続するreplacementは1つにまとまる。
- trimAndCollapseFrom(CharSequence sequence, char replacement) - 最初にtrimされる。残った文字に対して当てはまったcharはreplacementに置き換えられる。連続するreplacementは1つにまとまる。
勘違いするかもしれませんが あくまでstartWithです。indexOfので見つけた部分のをカットするわけではありません。
メソッド | 文字 |
---|---|
CharMatcher ret=CharMatcher.is(',') | tring text=",hello,,world," |
ret.trimFrom(text) | hello,,world |
ret.trimLeadingFrom(text) | hello,,world, |
ret.trimTrailingFrom(text) | ,,hello,,world |
ret.trimAndCollapseFrom(text,':') | hello:world |
前後の場合、連続しても、連続したマッチということで処理されます。 Collapseは置き換えた文字が続いたらまとめます。replaceはまとめません。
関連
a-zかどうかの判定は、base.AsciiのisLowerCase(char ch)、A-Zかどうかはbase.AsciiのisUpperCase(char ch)