• 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

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

     

     

     

     

  • 相关阅读:
    mysql双主配置
    nginx js、css多个请求合并为一个请求(concat模块)
    PHP中利用Redis管道加快执行
    总结最近游戏中活动出现被刷问题。
    问题记录--负载均衡的均衡器配置了高可用导致问题
    php的session获取不到问题之ie浏览器(yaf框架)
    Django URLs error: view must be a callable or a list/tuple in the case of include()
    在Sublime Text运行Python.How to run Python code from Sumblime Text
    JavaWeb项目自动化部署测试学习
    hadoop2.5.1+hbase1.1.2安装与配置
  • 原文地址:https://www.cnblogs.com/haolnu/p/7372552.html
Copyright © 2020-2023  润新知