Guava源码阅读-base-CharMatcher
package com.google.common.base; (部分内容摘自:http://blog.csdn.net/idealemail/article/details/53860439) 之前在进行模式匹配时,比如匹配字符串中的数字,都会使用正则表达式或是ASCII码范围比对。
Pattern pattern = Pattern.compile("\\d");
Matcher matcher = pattern.matcher(a);
while(matcher.find()){
System.out.println(matcher.group());
}
Pattern pattern = Pattern.compile("[0-9]");
Matcher matcher = pattern.matcher(a);
while(matcher.find()){
System.out.println(matcher.group());
}
if(str.charAt(i)>=48 && str.charAt(i)<=57){ //0-9数字的ASCII码的范围是48-57
//这个字符是数字
}
这种方法显的特别冗余,现在我们看一下guava的CharMatcher怎么去匹配的。
CharMatcher.digit().retainFrom(str)
上面这段代码的意思就是从str中找到数字。
简洁吧,下面开始进入源码阅读阶段。
1、any()方法
public static CharMatcher any() {
return Any.INSTANCE;
}
这个意思是匹配所有字符。
String str="love23next234csdn3423javaeye";
System.out.println(CharMatcher.any().retainFrom(str)); 输出结果:
love23next234csdn3423javaeye
2、none()
public static CharMatcher none() {
return None.INSTANCE;
}
这个方法是不匹配任何字符串
String str="love23next234csdn3423javaeye";
System.out.println(CharMatcher.none().retainFrom(str)); 输出结果:
3、whitespace()
public static CharMatcher whitespace() {
return Whitespace.INSTANCE;
}
匹配空白符。
下面统一将各个方法介绍如下:
breakingWhitespace():匹配换行 ascii():匹配ASCII码 digit():匹配数字 javaDigit():匹配java定义的digit javaLetter():匹配java定义的字母 javaLetterOrDigit():匹配java定义的字母或数字 javaUpperCase():匹配java定义的大写字母 javaLowerCase():匹配java定义的小写字母 javaIsoControl():匹配 匹配ISO控制字符 invisible():匹配所有看不见的字符 singleWidth():匹配单字宽字符, 如中文字就是双字宽
另外像这些方法比如WHITESPACE,已经被弃用了,可以被上面的额方法代替。
下面介绍一些使用方法:
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 endIncludesive): 返回匹配范围内任意字符的Matcher
CharMatcher forPredicate(Predicate<? super Charater> predicate): 返回使用predicate的apply()判断匹配的Matcher
CharMatcher negate(): 返回以当前Matcher判断规则相反的Matcher
CharMatcher and(CharMatcher other): 返回与other匹配条件组合做与来判断的Matcher
CharMatcher or(CharMatcher other): 返回与other匹配条件组合做或来判断的Matcher
比如上面的inRange()方法,就可以这样使用:
String str="love23next234csdn34数学2 3jav aey\ne";
CharMatcher.inRange('a','z').retainFrom(str) 输出结果:
lovenextcsdnjavaeye
下面再介绍一些文本匹配方法
boolean matchesAnyOf(CharSequence sequence): 只要sequence中有任意字符能匹配Matcher,返回true
boolean matchesAllOf(CharSequence sequence): sequence中所有字符都能匹配Matcher,返回true
boolean matchesNoneOf(CharSequence sequence): sequence中所有字符都不能匹配Matcher,返回true int indexIn(CharSequence sequence): 返回sequence中匹配到的第一个字符的坐标
int indexIn(CharSequence sequence, int start): 返回从start开始,在sequence中匹配到的第一个字符的坐标
int lastIndexIn(CharSequence sequence): 返回sequence中最后一次匹配到的字符的坐标
int countIn(CharSequence sequence): 返回sequence中匹配到的字符计数
比如:
CharMatcher.digit().countIn(str)
就会输出字符串中所有数字的个数。
字符串使用方法,介绍如下:
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
比如trimFrom()方法
String str="123love23next234csdn34数学2 3jav aeye456";
CharMatcher.digit().trimFrom(str); 输出结果:
love23next234csdn34数学2 3jav aeye 把开头和结尾的数字都去掉了
Guava源码阅读-base-CharMatcher的更多相关文章
- Guava源码阅读-base-Enums
package com.google.common.base; guava源码中对这个类的方法介绍只有一句话: Utility methods for working with {@link Enum ...
- Guava源码阅读-base-Charsets
package com.google.common.base; 今天在找base包下的源码阅读时,看到了Charsets,肯定是定义字符集的类,本来就想简单的看一下.(部分内容摘抄自:http://b ...
- Guava源码阅读-base-Strings
package com.google.common.base; 今天阅读的是Srings类,这在程序中经常使用. 比如判断字符串是否为空,我们在之前用jdk方法判断是会用下面这个判断语句. if( i ...
- Guava源码阅读-collect-Multiset
package com.google.common.collect; 我们在进行字符统计时,同常采用的方法就是: String[] text=new String[]{"the weathe ...
- Guava源码阅读-io-Files
package com.google.common.io; 今天阅读一个非常常用的类Files,文件操作类. readLines(File file, Charset charset),这个方法将Fi ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- 源码阅读系列:EventBus
title: 源码阅读系列:EventBus date: 2016-12-22 16:16:47 tags: 源码阅读 --- EventBus 是人们在日常开发中经常会用到的开源库,即使是不直接用的 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
随机推荐
- python自动华 (二)
Python自动化 [第二篇]:Python基础-列表.元组.字典 本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初 ...
- 1、python--第一天练习题
#1.使用while循环输入 1 2 3 4 5 6 8 9 10 k = 0 while k < 10: k += 1 if k == 7: continue print(k) #2.求1-1 ...
- 028_切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)
mkdir /data/scriptsvim /data/scripts/nginx_log.sh #!/bin/bashlogs_path="/usr/local/nginx/logs/& ...
- 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )
题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...
- 【csp模拟赛6】相遇--LCA
对于30%的数据:暴力枚举判断 对于60%的数据:还是暴力枚举,把两条路径都走一遍计一下数就行,出现一个点被访问两次即可判定重合 对于100%的数据:找出每条路径中距离根最近的点(lca),判断这个点 ...
- c 判断数字是否无限
/* isinf example */ #include <stdio.h> /* printf */ #include <math.h> /* isinf, sqrt */ ...
- CF1214D
CF1214D 题意: 给你一个 $ n \times m $ 的矩阵,求最少用多少个障碍,将 $ (1,1) $ 到 $ (n,m) $ 的路径堵死. 题意: 因为可以将起点两边堵死,所以答案最多是 ...
- html5获取地理位置和定位
1.H5地理位置定位功能 首先判断用户浏览器是否支持该功能,目前大多数现代浏览器均支持,获取位置信息需用户授权同意 function getLocation(){ if (navigator.geol ...
- RHSA-2018:3059-低危: X.org X11 安全和BUG修复更新
修复命令: yum update libXfontyum update libxcbyum update xorg-x11-font-utilsyum update xorg-x11-utilsyum ...
- spring cloud gateway:Unable to find GatewayFilterFactory with name Hystrix
在springcloud gateway中引用Hystrix filter 编译启动时提示 Unable to find GatewayFilterFactory with name Hystrix ...