开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情
Pattern和Matcher
- Pattern
- Pattern是获取正则表达式的对象
- Pattern用来存储正则表达式的规则
- Matcher
- Matcher是获取文本匹配器对象
- Matcher在一个文本字符串中找符合pattern规则的小串
1.首先得有一个String的文本字符串
String str = "Java自从95年间问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +
"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
2.接着我们要创建一个正则表达式的对象
Pattern内部是正则表达式的规则
Pattern pattern = Pattern.compile("Java\\d{0,2}");
3.然后我们要创建一个文本匹配器对象
Matcher matcher = pattern.matcher(str);
解释:
- matcher是文本匹配器的对象
- str是大串
- pattern是正则表达式的规则
- matcher要在str中找符合pattern规则的小串
4.文本匹配器find文本字符串
拿着文本匹配器从头开始读取寻找是否有满足规则的子串
- 如果没有,方法返回false
- 如果有,返回true。在底层记录子串的起始索引和结束索引+1
boolean b = matcher.find();
5.用一个字符串来截取find
String s1 = matcher.group();
System.out.println(s1);
- 方法底层会根据find方法记录的索引进行字符串的截取
- subString(起始索引,结束索引);包头不包尾
- [0,4)但是不包含4索引
- 会把截取的小串进行返回
6.结果展示
7.改进为循环寻找遍历完
while (matcher.find()) {
String s = matcher.group();
System.out.println(s);
}
8.循环遍历结果
从网络中爬取成语
1.创建一个URL对象
URL url = new URL("http://www.art311.cn/zi/4e00.html");
2.连接上这个网络
PS:注意电脑要联网
URLConnection connection = url.openConnection();
3.创建一个对象取读取网络中的数据
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
4.获取正则表达式的对象
获取 “以百开头的成语”
Pattern pattern = Pattern.compile("百[^(a-zA-Z0-9)]{3}");
5.在读取的时候每次读取一整行
然后在每一行都判断一下是否满足正则表达式
while ((line = br.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
while (matcher.find())
System.out.println(matcher.group());
}
6.关闭数据流
br.close();