简介
CharMatcher 提供了各种方法来处理各种 JAVA char 类型值。
类方法说明
官方文档:CharMatcher (Guava: Google Core Libraries for Java 27.0.1-jre API)
| 方法名称 | 方法说明 |
|---|---|
and(CharMatcher other) | 修饰匹配器,返回当前匹配器与other匹配器做与操作的匹配器. |
any() | 匹配任意字符的匹配器. |
anyOf(CharSequence sequence) | 通过sequence初始化匹配器,该匹配器可以匹配sequence中所有字符. |
ascii() | 获取可以匹配所有ascii码的匹配器. |
breakingWhitespace() | 获取可以匹配所有可换行的空白字符的匹配器(不包括非换行空白字符,例如”\u00a0″). |
collapseFrom(CharSequence sequence, char replacement) | 折叠操作,将charMatcher连续被匹配到的字符用一个replacement替换. |
countIn(CharSequence sequence) | 获取charMatcher在sequence中匹配到字符的个数. |
forPredicate(Predicate<? super Character> predicate) | 通过Predicate初始化CharMatcher,该匹配器可以匹配Predicate函数式接口apply方法实现返回True的字符. |
indexIn(CharSequence sequence) | 获取charMatcher在当sequence中匹配到的第一个字符的index. |
indexIn(CharSequence sequence, int start) | 获取charMatcher在当sequence中从index start开始匹配到的第一个字符的index. |
inRange(char startInclusive, char endInclusive) | 通过边界值初始化CharMatcher,该匹配器可以匹配处于startInclusive和endInclusive之间的所有字符. |
is(char match) | 通过单个字符初始化CharMatcher,该匹配器只能匹配match这个单字符. |
isNot(char match) | 通过单个字符初始化CharMatcher,该匹配器可以匹配除了match之外的所有字符. |
javaIsoControl() | 获取可以匹配所有Java转义字符的匹配器. |
lastIndexIn(CharSequence sequence) | 获取获取charMatcher在当sequence中匹配到的最后一个字符的index. |
matches(char c) | 确定给定字符的true或false值。 |
matchesAllOf(CharSequence sequence) | 判断sequence所有字符是否都被charMatcher匹配. |
matchesAnyOf(CharSequence sequence) | 判断sequence中是否存在字符被charMatcher匹配. |
matchesNoneOf(CharSequence sequence) | 判断sequence所有字符是否都没被charMatcher匹配. |
negate() | 修饰匹配器,返回和当前匹配器相反的匹配器. |
none() | 不匹配任何字符的匹配器,与any()相反. |
noneOf(CharSequence sequence) | 通过sequence初始化匹配器,该匹配器可以匹配除sequence之外的所有字符. |
or(CharMatcher other) | 修饰匹配器,返回当前匹配器与other匹配器做或操作的匹配器. |
precomputed() | 修饰匹配器,返回的CharMatcher在检索时比原始的CharMatcher效率高,但是预处理也需要花时间,所以只有当某个 CharMatcher需要被使用上千次的时候才有必要进行预处理. |
removeFrom(CharSequence sequence) | 删除sequence中所有被charMatcher匹配到的字符. |
replaceFrom(CharSequence sequence, char replacement) | 将sequence中所有被charMatcher匹配到的字符用replacement替换. |
replaceFrom(CharSequence sequence, CharSequence replacement) | 将sequence中所有被charMatcher匹配到的字符用replacement替换. |
retainFrom(CharSequence sequence) | 保留sequence中所有被charMatcher匹配到的字符. |
toString() | 返回此CharMatcher的字符串表示形式,例如CharMatcher.or(WHITESPACE, JAVA_DIGIT). |
trimAndCollapseFrom(CharSequence sequence, char replacement) | 先对sequence做trim操作(删除sequence头和尾的空格),再对trim的结果做collapse操作(将charMatcher连续被匹配到的字符用一个replacement替换). |
trimFrom(CharSequence sequence) | 删除sequence首尾charMatcher匹配到的字符. |
trimLeadingFrom(CharSequence sequence) | 删除sequence首部charMatcher匹配到的字符. |
StrimTrailingFrom(CharSequence sequence) | 删除sequence尾部charMatcher匹配到的字符. |
whitespace() | 获取可以匹配所有空格的匹配器. |
使用Demo
import com.google.common.base.CharMatcher;
import org.junit.Test;/*** 字符匹配*/
public class CharMatcherTest {/*** collapseFrom 配到的字符做替换*/@Testpublic void testCollapseFrom() {//配到的字符做替换//匹配空白String input = " Hello World ";String result = CharMatcher.breakingWhitespace().collapseFrom(input, '*');System.out.println(result);//*Hello*World*//匹配指定字符String result1 = CharMatcher.is('l').collapseFrom(input, '*');System.out.println(result1);// He*o Wor*d 注意:两边空格还在//匹配指定字符String result2 = CharMatcher.inRange('l','o').collapseFrom(input, '*');System.out.println(result2);// He* W*r*d 注意:两边空格还在//trimAndCollapseFrom:先去掉两边空格再进行替换String result3 = CharMatcher.breakingWhitespace().trimAndCollapseFrom(input, '*');System.out.println(result3);//Hello*World}/*** 去除空格*/@Testpublic void testTrim() {String str = " Hello World ";//trimFrom 去两边空格System.out.println(CharMatcher.breakingWhitespace().trimFrom(str)); // Hello World//trimLeadingFrom 左边去空格System.out.println(CharMatcher.breakingWhitespace().trimLeadingFrom(str)); // Hello World//trimTrailingFrom右边去空格System.out.println(CharMatcher.breakingWhitespace().trimTrailingFrom(str)); // Hello WorldSystem.out.println(CharMatcher.breakingWhitespace().removeFrom(str)); //HelloWorld}/*** retainFrom 保留匹配到的字符*/@Testpublic void testRetainFrom() {String str = " Hi 123 Hello 456 World ";System.out.println(CharMatcher.is('l').retainFrom(str)); //lll//匹配字母和数字CharMatcher matcher = CharMatcher.forPredicate(Character::isLetterOrDigit);//Hi123Hello456WorldSystem.out.println(matcher.retainFrom(str));//匹配小写CharMatcher matcher2 = CharMatcher.forPredicate(Character::isLowerCase);//ielloorldSystem.out.println(matcher2.retainFrom(str));}/*** removeFrom 删除所有匹配的字符*/@Testpublic void testRemoveFrom() {System.out.println(CharMatcher.is('l').removeFrom(" Hi 123 Hello 456 World ")); // Hi 123 Heo 456 Word}/*** countIn 查找字符在字符串中的个数*/@Testpublic void testCountIn() {System.out.println(CharMatcher.is('a').countIn("Hello World Sharing the Google Guava Used")); // 3String input = "H*el.lo,}12";//匹配数子CharMatcher matcher = CharMatcher.forPredicate(Character::isDigit);System.out.println(matcher.countIn(input)); //2matcher = CharMatcher.inRange('a', 'l');System.out.println(matcher.countIn(input)); // 3}/*** indexIn 匹配到的第一个字符的index* lastIndexIn 匹配到的最后一个字符的index** 下标从0开始 若不存在返回-1*/@Testpublic void testIndexIn_lastIndexIn() {String input = "Hello World";CharMatcher matcher = CharMatcher.is('l');System.out.println(matcher.indexIn(input));//2System.out.println(matcher.indexIn(input, 10));//-1System.out.println(matcher.lastIndexIn(input));//9}//=======匹配===========///*** is 匹配参数之内的所有字符* isNot 匹配参数之外的所有字符*/@Testpublic void testIs_isNot(){String input = "a, c, z, 1, 2";System.out.println(CharMatcher.is(',').retainFrom(input)); // ,,,,System.out.println(CharMatcher.is(',').removeFrom(input)); // a c z 1 2System.out.println(CharMatcher.isNot(',').retainFrom(input)); // a c z 1 2System.out.println(CharMatcher.isNot(',').removeFrom(input)); // ,,,,}/*** 匹配java转义字符*/@Testpublic void testJavaIsoControl(){String input = "ab\tcd\nef\bg";CharMatcher matcher = CharMatcher.javaIsoControl();System.out.println(matcher.removeFrom(input)); // abcdefg}/*** 两个 Matcher 同时匹配*/@Testpublic void testDoubleMatcher() {CharMatcher matcher0 = CharMatcher.forPredicate(Character::isLetterOrDigit);CharMatcher matcher1 = CharMatcher.forPredicate(Character::isLowerCase);String result = matcher0.and(matcher1).retainFrom("H*el.lo,}12");System.out.println(result); // ell0}/*** matchesAllOf 判断sequence所有字符是否都被charMatcher匹配* matchesAnyOf 判断sequence中是否存在字符被charMatcher匹配* matchesNoneOf 判断sequence所有字符是否都没被charMatcher匹配*/@Testpublic void test_matchesAllOf_matchesAnyOf_matchesNoneOf(){String input = "**e,l.lo,}12";CharMatcher matcher = CharMatcher.is(',');System.out.println(matcher.matchesAllOf(input)); // falsematcher = CharMatcher.is(',');System.out.println(matcher.matchesAnyOf(input)); // truematcher = CharMatcher.is('?');System.out.println(matcher.matchesNoneOf(input)); // true}/*** 匹配任意字符*/@Testpublic void testAny() {String input = "H*el.lo,}12";CharMatcher matcher = CharMatcher.any();String result = matcher.replaceFrom(input,"替换,");System.out.println(result); //替换,替换,替换,替换,替换,替换,替换,替换,替换,替换,替换,matcher = CharMatcher.anyOf("Hel");System.out.println(matcher.retainFrom(input)); // HellSystem.out.println(matcher.removeFrom(input)); // *.o,}12}/*** 匹配 Ascii 常用的字符编码标准*/@Testpublic void testAscii() {String input = "罗あH*el.lo,}12";CharMatcher matcher = CharMatcher.ascii();System.out.println(matcher.retainFrom(input)); // H*el.lo,}12System.out.println(matcher.removeFrom(input)); // 罗あ}/*** 取反* negate 返回与当前CharMatcher相反的CharMatcher*/@Testpublic void testNegate(){String input = "あH*el.lo,}12";CharMatcher matcher = CharMatcher.ascii().negate();System.out.println(matcher.retainFrom(input)); // あSystem.out.println(matcher.removeFrom(input)); // H*el.lo,}12}/*** none 不匹配任何字符,与any()相反* noneOf 不匹配CharSequence内的任意一个字符,与anyOf()相反*/@Testpublic void testNone_noneOf(){String input = "H*el.lo,}12";CharMatcher matcher = CharMatcher.none();System.out.println(matcher.retainFrom(input)); // ""System.out.println(matcher.retainFrom(input).length()); // 0matcher = CharMatcher.noneOf("Hel");System.out.println(matcher.retainFrom(input)); // *.o,}12System.out.println(matcher.removeFrom(input)); // Hell}/*** forPredicate 初始化匹配器*/public void testForPredicate() {
// CharMatcher charMatcher = CharMatcher.forPredicate(new Predicate<Character>() {
// @Override
// public boolean apply(@Nullable Character input) {
// return Character.isLetterOrDigit(input);
// }
// });// lambda 写法CharMatcher charMatcher = CharMatcher.forPredicate(input -> Character.isLetterOrDigit(input));String input = "H*el.lo,}12";System.out.println(charMatcher.retainFrom(input)); // Hello12}
}