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匹配操作
- matches方法:对整个字符串进行匹配,只有整个字符串都匹配了才返回true。
- lookingAt方法:对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true。
- find方法:对字符串进行匹配,匹配到的字符串可以在任何位置。
Matcher方法API
- start():返回匹配到的子字符串在字符串中的索引位置。
- end():返回匹配到的子字符串的最后一个字符在字符串中的索引位置。
- 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时才可以使用。