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

2020-06-29  本文已影响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时才可以使用。

上一篇下一篇

猜你喜欢

热点阅读