zoukankan      html  css  js  c++  java
  • 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
    e";
    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

    把开头和结尾的数字都去掉了

     

     

     

     

  • 相关阅读:
    Linux 学习 step by step (1)
    ubuntu server nginx 安装与配置
    ubuntu server samba服务器配置
    iOS app集成支付宝支付流程及后台php订单签名处理
    mac 连接windows 共享内容
    linux 文件查找,which,whereis,locate,find
    ubuntu server vsftpd 虚拟用户及目录
    ubuntu server 安装 mantis bug tracker 中文配置
    ubuntu server vsftpd 匿名用户上传下载及目录设置
    linux 用户管理,用户权限管理,用户组管理
  • 原文地址:https://www.cnblogs.com/haolnu/p/7372552.html
Copyright © 2011-2022 走看看