Guava源码解析七:CharMatcher源码解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dancheng1/article/details/85253073

一个处理字符串的类

实现类

ANY

匹配任何字符

ASCII

匹配是否是ASCII字符

BREAKING_WHITESPACE

匹配所有可换行的空白字符(不包括非换行空白字符,例如"\u00a0")

DIGIT

匹配ASCII数字

INVISIBLE

匹配所有看不见的字符

JAVA_DIGIT

匹配UNICODE数字, 使用 Character.isDigit() 实现

JAVA_ISO_CONTROL

匹配ISO控制字符, 使用 Charater.isISOControl() 实现

JAVA_LETTER

匹配字母, 使用 Charater.isLetter() 实现

JAVA_LETTER_OR_DIGET

匹配数字或字母,22版本已经去掉

JAVA_LOWER_CASE

匹配小写

JAVA_UPPER_CASE

匹配大写

NONE

不匹配所有字符

SINGLE_WIDTH

匹配单字宽字符, 如中文字就是双字宽

WHITESPACE

匹配所有空白字符


使用实现类进行过滤的例子:

String str = "1aA2bB3cC4dD5eE6嘿嘿fF7gG8hH9iIabc!@#$%^&*()_+|}{:\"?><";
//ANY-匹配任何字符
System.out.println(CharMatcher.ANY.retainFrom(str));
//结果:1aA2bB3cC4dD5eE6嘿嘿fF7gG8hH9iIabc!@#$%^&*()_+|}{:"?><
//ASCII-匹配是否是ASCII字符
System.out.println(CharMatcher.ASCII.retainFrom(str));
//结果:1aA2bB3cC4dD5eE6fF7gG8hH9iIabc!@#$%^&*()_+|}{:"?><
//BREAKING_WHITESPACE-匹配所有可换行的空白字符
System.out.println(CharMatcher.BREAKING_WHITESPACE.retainFrom(str));
//结果:
//DIGIT-匹配ASCII数字
System.out.println(CharMatcher.DIGIT.retainFrom(str));
//结果:123456789
//INVISIBLE-匹配所有看不见的字符
System.out.println(CharMatcher.INVISIBLE.retainFrom(str));
//结果:
//JAVA_DIGIT-匹配UNICODE数字
System.out.println(CharMatcher.JAVA_DIGIT.retainFrom(str));
//结果:123456789
//JAVA_ISO_CONTROL-匹配ISO控制字符
System.out.println(CharMatcher.JAVA_ISO_CONTROL.retainFrom(str));
//结果:
//JAVA_LETTER-匹配字母
System.out.println(CharMatcher.JAVA_LETTER.retainFrom(str));
//结果:aAbBcCdDeE嘿嘿fFgGhHiIabc
//JAVA_LOWER_CASE-匹配小写
System.out.println(CharMatcher.JAVA_LOWER_CASE.retainFrom(str));
//结果:abcdefghiabc
//JAVA_UPPER_CASE-匹配大写
System.out.println(CharMatcher.JAVA_UPPER_CASE.retainFrom(str));
//结果:ABCDEFGHI
//NONE-不匹配所有字符
System.out.println(CharMatcher.NONE.retainFrom(str));
//结果:
//SINGLE_WIDTH-匹配单字宽字符
System.out.println(CharMatcher.SINGLE_WIDTH.retainFrom(str));
//结果:1aA2bB3cC4dD5eE6fF7gG8hH9iIabc!@#$%^&*()_+|}{:"?><
//WHITESPACE-匹配所有空白字符
System.out.println(CharMatcher.WHITESPACE.retainFrom(str));
//结果:

常用方法

常用方法可分为4类:

第一类得到匹配指定规则的Matcher

CharMatcher is(char match):返回匹配指定字符的Matcher
CharMatcher isNot(char match):返回不匹配指定字符的Matcher
CharMatcher anyOf(CharSequence sequence):返回匹配sequence中任意字符的Matcher
CharMatcher noneOf(CharSequence sequence):返回不匹配sequence中任何一个字符的Matcher
CharMatcher inRange(char startInclusive, char endInclusive):返回匹配范围内任意字符的Matcher
CharMatcher negate():返回当前Matcher相反的Matcher
CharMatcher and(CharMatcher other):返回与other匹配条件组合做与来判断Matcher,即取两个Matcher的交集
CharMatcher or(CharMatcher other):返回与other匹配条件组合做或来判断Matcher,即取两个Matcher的并集

 

使用工厂方法和条件组合方法进行过滤的例子:

String str = "1aA2bB3cC4dD5eE6嘿嘿fF7gG8hH9iIabc!@#$%^&*()_+|}{:\"?><";
//is方法,返回匹配指定字符的Matcher
System.out.println(CharMatcher.is('a').retainFrom(str));
//结果:aa
//isNot方法,返回不匹配指定字符的Matcher
System.out.println(CharMatcher.isNot('a').retainFrom(str));
//结果:1A2bB3cC4dD5eE6嘿嘿fF7gG8hH9iIbc!@#$%^&*()_+|}{:"?><
//anyOf方法,返回匹配sequence中任意字符的Matcher
System.out.println(CharMatcher.anyOf("abcdef嘿嘿|").retainFrom(str));
//结果:abcde嘿嘿fabc|
//noneOf方法,返回不匹配sequence中任何一个字符的Matcher
System.out.println(CharMatcher.noneOf("abcdef嘿嘿|").retainFrom(str));
//结果:1A2B3C4D5E6F7gG8hH9iI!@#$%^&*()_+}{:"?><
//inRange方法,返回匹配范围内任意字符的Matcher
System.out.println(CharMatcher.inRange('a', 'e').retainFrom(str));
//结果:abcdeabc
//negate方法,返回当前Matcher相反的Matcher
System.out.println(CharMatcher.inRange('a', 'e').negate().retainFrom(str));
//结果:1A2B3C4D5E6嘿嘿fF7gG8hH9iI!@#$%^&*()_+|}{:"?><
//and方法,返回与other匹配条件组合做与来判断Matcher,即取两个Matcher的交集
System.out.println(CharMatcher.inRange('a', 'e').and(CharMatcher.inRange('c', 'k')).retainFrom(str));
//结果:cdec
//or方法,返回与other匹配条件组合做或来判断Matcher,即取两个Matcher的并集
System.out.println(CharMatcher.inRange('a', 'e').or(CharMatcher.inRange('c', 'h')).retainFrom(str));
//结果:abcdefghabc

第二类判断字符串是否匹配

Boolean matchesAnyOf(CharSequence sequence):只要sequence中有任意字符能匹配Matcher,返回true
Boolean matchesAllOf(CharSequence sequence):sequence中所有字符能匹配Matcher,返回true
Boolean matchesNoneOf(CharSequence sequence):sequence中所有字符都不能匹配Matcher,返回true

 

判断字符串是否匹配的例子:

String str = "1aA2bB3cC4dD5eE6嘿嘿fF7gG8hH9iIabc!@#$%^&*()_+|}{:\"?><";
//matchesAnyOf方法,只要sequence中有任意字符能匹配Matcher,返回true
System.out.println(CharMatcher.is('a').matchesAnyOf(str));  //结果:true
System.out.println(CharMatcher.is('v').matchesAnyOf(str));  //结果:false
//matchesAllOf方法,sequence中所有字符能匹配Matcher,返回true
System.out.println(CharMatcher.is('a').matchesAllOf(str));   //结果:false
System.out.println(CharMatcher.is('a').matchesAllOf("aaa")); //结果:true
//matchesNoneOf方法,sequence中所有字符都不能匹配Matcher,返回true
System.out.println(CharMatcher.is('a').matchesNoneOf(str));  //结果false
System.out.println(CharMatcher.is('v').matchesNoneOf(str));  //结果true

第三类获取字符串与Matcher匹配的位子信息

int indexIn(CharSequence sequence): 返回sequence中匹配到的第一个字符的坐标
int indexIn(CharSequence sequence, int start): 返回从start开始,在sequence中匹配到的第一个字符的坐标
int lastIndexIn(CharSequence sequence): 返回sequence中最后一次匹配到的字符的坐标
int countIn(CharSequence sequence): 返回sequence中匹配到的字符计数

 

找到匹配字符串位子信息的例子:

String str = "1aA2bB3cC4dD5eE6嘿嘿fF7gG8hH9iIabc!@#$%^&*()_+|}{:\"?><";
//indexIn方法,返回sequence中匹配到的第一个字符的坐标
System.out.println(CharMatcher.is('a').indexIn(str));   //结果:1
//indexIn方法,返回从start开始,在sequence中匹配到的第一个字符的坐标
System.out.println(CharMatcher.is('a').indexIn(str, 3));   //结果:29
//lastIndexIn方法,返回sequence中最后一次匹配到的字符的坐标
System.out.println(CharMatcher.is('a').lastIndexIn(str));   //结果:29
//countIn方法,返回sequence中匹配到的字符计数
System.out.println(CharMatcher.is('a').countIn(str));   //结果:2

 

第四类对字符串进行怎样匹配处理

String removeFrom(CharSequence sequence): 删除sequence中匹配到到的字符并返回
String retainFrom(CharSequence sequence): 保留sequence中匹配到的字符并返回
String replaceFrom(CharSequence sequence, char replacement): 替换sequence中匹配到的字符并返回
String trimFrom(CharSequence sequence): 删除首尾匹配到的字符并返回
String trimLeadingFrom(CharSequence sequence): 删除首部匹配到的字符
String trimTrailingFrom(CharSequence sequence): 删除尾部匹配到的字符
String collapseFrom(CharSequence sequence, char replacement): 将匹配到的组(连续匹配的字符)替换成replacement
String trimAndCollapseFrom(CharSequence sequence, char replacement): 先trim在replace

 

猜你喜欢

转载自blog.csdn.net/dancheng1/article/details/85253073
今日推荐