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 ...
随机推荐
- springboot2.0入门(六)-- ymal语法、数据校验
一.基本使用 1.ymal语法是一种更符合人类命名习惯的语法: # 1. 一个家庭有爸爸.妈妈.孩子. # 2. 这个家庭有一个名字(family-name)叫做“happy family” # 3. ...
- django获取数据
获取单个值 request.POST.get('user') # user对应前端name属性对应的值 获取多个值(如checkbox,multiple) request.POST.getlist(' ...
- 爬取淘宝商品数据并保存在excel中
1.re实现 import requests from requests.exceptions import RequestException import re,json import xlwt,x ...
- keydown([[data],fn]) 当键盘或按钮被按下时,发生 keydown 事件。
keydown([[data],fn]) 概述 当键盘或按钮被按下时,发生 keydown 事件. 注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生.直线电机滑台 参数 fnFu ...
- CF812C Sagheer and Nubian Market 二分+贪心
模拟赛给他们出T1好了~ code: #include <bits/stdc++.h> #define ll long long #define N 100006 #define setI ...
- Poj 2976 Dropping tests(01分数规划 牛顿迭代)
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Description In a certain course, you take n t ...
- idea导入项目之后包位置报错
解决办法:
- C语言指针方法对字符串进行去重
自己编写了3种方法,都是使用指针的.(在LR中编写的) 1.先在原字符串进行比较,然后再放入目标字符串 Action() { char *srt="aadfeedeewwffggecccew ...
- springboot连接mongodb进行CRUD
springboot连接mongodb进行CRUD的过程: 在执行以下操作前已安装了mongodb并创建了用户和数据库,使用Robo 3T可成功连接. 1.创建springboot项目,加入以下mav ...
- 学完微型服务器(Tomcat)对其工作流程的理解,自己着手写个简单的tomcat
学完微型服务器(Tomcat)对其工作流程的理解,自己着手写个简单的tomcat 2019-05-09 19:28:42 注:项目(MyEclipse)创建的时候选择:Web Service Pr ...