美文网首页
Java基础篇(19)—正则表达式

Java基础篇(19)—正则表达式

作者: 小胖学编程 | 来源:发表于2020-06-29 12:06 被阅读0次

    Java的正则表达式是java.util.regex包下Pattern类与Matcher类实现的。

    Pattern类

    用于创建一个正则表达式

    Pattern的创建

    他的构造方法是私有的,但可以使用简单工厂模式Pattern.complie(String regex)来创建一个正则表达式。

    Pattern类可以进行一些简单的匹配

    public static boolean matches(String regex,CharSequence input)
    

    该方法是Pattern类的静态方法,用于快速匹配字符串,该方法只适用于只匹配一次,且匹配全部字符串。

    典型的使用

    //该Pattern实例可以定义在属性上,重复匹配。
    Pattern p = Pattern.compile("a*b");
    Matcher m = p.matcher("aaaaab");
    boolean b = m.matches();
    

    Pattern的实例是不可变的,即可以安全的被多个并发线程使用,故该方法可以使用于多次匹配。

    Matcher类

    Matcher类提供了对正则表达式分组的支持,以及正则表达式的多次匹配的支持。

    Matcher的创建

    Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.

    Matcher匹配操作

    1. matches方法:对整个字符串进行匹配,只有整个字符串都匹配了才返回true。
    2. lookingAt方法:对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true。
    3. find方法:对字符串进行匹配,匹配到的字符串可以在任何位置。

    Matcher方法API

    1. start():返回匹配到的子字符串在字符串中的索引位置。
    2. end():返回匹配到的子字符串的最后一个字符在字符串中的索引位置。
    3. group():返回匹配到的子字符串。
    public class TestCom {
    
        public static void main(String[] args) {
            String str = "aaa2223bb34";
            //全数字的模式
            Pattern pattern = Pattern.compile("\\d+");
            Matcher matcher = pattern.matcher(str);
            //判断是否存在这样的序列
            System.out.println(matcher.find());
            System.out.println(matcher.start());//返回3
            System.out.println(matcher.end());//返回7,返回的是2223后的索引号
            System.out.println(matcher.group());//返回2223
    
            //子序列的替换
            StringBuilder sb = new StringBuilder(str);
            while (matcher.find()) {
                sb.replace(matcher.start(), matcher.end(), "");
                //因为已经替换,故寻找下一个子序列
                matcher = pattern.matcher(sb);
            }
            System.out.println(sb.toString());
        }
    }
    

    注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时才可以使用。

    相关文章

      网友评论

          本文标题:Java基础篇(19)—正则表达式

          本文链接:https://www.haomeiwen.com/subject/qqlofktx.html