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的更多相关文章

  1. Guava源码阅读-base-Enums

    package com.google.common.base; guava源码中对这个类的方法介绍只有一句话: Utility methods for working with {@link Enum ...

  2. Guava源码阅读-base-Charsets

    package com.google.common.base; 今天在找base包下的源码阅读时,看到了Charsets,肯定是定义字符集的类,本来就想简单的看一下.(部分内容摘抄自:http://b ...

  3. Guava源码阅读-base-Strings

    package com.google.common.base; 今天阅读的是Srings类,这在程序中经常使用. 比如判断字符串是否为空,我们在之前用jdk方法判断是会用下面这个判断语句. if( i ...

  4. Guava源码阅读-collect-Multiset

    package com.google.common.collect; 我们在进行字符统计时,同常采用的方法就是: String[] text=new String[]{"the weathe ...

  5. Guava源码阅读-io-Files

    package com.google.common.io; 今天阅读一个非常常用的类Files,文件操作类. readLines(File file, Charset charset),这个方法将Fi ...

  6. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

  7. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  8. 源码阅读系列:EventBus

    title: 源码阅读系列:EventBus date: 2016-12-22 16:16:47 tags: 源码阅读 --- EventBus 是人们在日常开发中经常会用到的开源库,即使是不直接用的 ...

  9. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

随机推荐

  1. 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 ...

  2. P2168 [NOI2015]荷马史诗 k叉哈夫曼树

    思路:哈夫曼编码 提交:1次(参考题解) 题解:类似合并果子$QwQ$ 取出前$k$小(注意如果叶子结点不满的话要补全),合并起来再扔回堆里去. #include<cstdio> #inc ...

  3. 【概率论】3-5:边缘分布(Marginal Distribution)

    title: [概率论]3-5:边缘分布(Marginal Distribution) categories: Mathematic Probability keywords: Marginal p. ...

  4. 数据结构实验之栈与队列五:下一较大值(一)(SDUT 3332)

    #include <bits/stdc++.h> using namespace std; int a[1005]; int main() { int t,n,i,j; while(~sc ...

  5. windows游戏编程X86 (内存)寄存器相关的基本概念

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22446971 作者:jadeshu   邮箱: jades ...

  6. Java主线程在子线程执行完毕后再执行

    一.join() Thread中的join()方法就是同步,它使得线程之间由并行执行变为串行执行. public class MyJoinTest { public static void main( ...

  7. java实现磁盘先来先服务算法

    package demo; import java.awt.List; import java.util.ArrayList; import java.util.Arrays; public clas ...

  8. PCA人脸识别学习笔记---原理篇

     前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ...

  9. python包中__init__.py文件的作用

    python包中__init__.py文件的作用 __init__.py文件最常用的作用是标识一个文件夹是一个 python包. __init__.py文件的另一个作用是定义模糊导入时要导入的内容. ...

  10. ThinkPHP使用smarty模板引擎的方法

    ThinkPHP支持多种php模板引擎,可以根据个人需要加以配置.下面我们以Smarty模板引擎为例,给大家说说具体的操作流程! 首先去Smarty官网上下载一个Smarty.本站下载地址:http: ...