import java.util.Arrays;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
// Java 提供了 java.util.regex 包
// 它包含了 Pattern 和 Matcher 类,用于处理正则表达式的匹配操作
// 英语:Regular Expression = regex
// Pattern 与 Matcher 一起合作
// Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
// 单独用Pattern只能使用boolean match = Pattern.matches(String regex,String input) 是一种最基础最简单的匹配
// 不如直接使用String自带的matches(String regex)方法
public class Main {
public static void main(String[] args) {
// Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建
// 即不能使用new Pattern的方法创建Pattern对象
// 可以通过Pattern.compile(String regex)这个静态方法创建一个正则表达式对象
// Java代码示例:
Pattern p1 = Pattern.compile("\\w+");
System.out.println(p1.pattern()); //返回 \w+
//pattern()返回正则表达式的字符串形式,其实就是返回Pattern.compile(String regex)的regex参数
// Pattern.split(String input)
// 用于分隔字符串,并返回一个String[]
// String.split(String regex) = Pattern.split(String input)
// Java代码示例:
Pattern p2 = Pattern.compile("\\d+");
String[] strs = p2.split("kkk123ttt456xxx");
System.out.println(Arrays.toString(strs));
// 结果:strs[0]="kkk" strs[1]="ttt" strs[2]="xxx"
// Pattern.matches(String regex,String input)
// 是一个静态方法 (指不需要创建对象,直接由类名使用)
// 用于快速匹配字符串,该方法只能一次性匹配,且匹配全部字符串
// Java代码示例:
System.out.print(Pattern.matches("\\d+", "3333") + " "); //返回true
System.out.print(Pattern.matches("\\d+", "3333aa") + " "); //返回faLse,需要匹配整个字符串
System.out.println(Pattern.matches("\\d+", "22bb33")); //返回false,需要匹配整个字符串
// Pattern.matcher(String input) 返回一个Matcher对象
// Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(String input)方法得到该类的实例
// Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作
// Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
// Java代码示例:
Pattern p3 = Pattern.compile("\\d+");
Matcher m1 = p3.matcher("22bb33");
System.out.println(m1.pattern()); //返回p3的字符串形式,也就是返回该Matcher对象是由哪个Pattern对象的创建的
// Matcher.matches() / Matcher.lookingAt() / Matcher.find()
// Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false
// matches()对整个字符串进行匹配,只有整个字符串都匹配才返回true
// Java代码示例:
Pattern p4 = Pattern.compile("\\d+");
Matcher m2 = p4.matcher("22bb33");
System.out.print(m2.matches() + " "); //返回false
Matcher m3 = p4.matcher("3333");
System.out.println(m3.matches()); //返回true
// Pattern.matches(String regex,String input)
// Pattern.compile(regex).matcher(input).matches()
// 上述两条语句等价
// lookingAt()对开头的字符串进行匹配,只有匹配到的字符串在最前面才返回true
// Java代码示例:
Pattern p5 = Pattern.compile("\\d+");
Matcher m4 = p5.matcher("22bb33");
System.out.print(m4.lookingAt() + " "); //返回true,因为 \d+ 能匹配前面的22
Matcher m5 = p5.matcher("aa3333");
System.out.println(m5.lookingAt()); //返回false,因为 \d+ 不能匹配前面的aa
// find()对字符串进行匹配,匹配到的字符串可以在任何位置
// Java代码示例:
Pattern p6 = Pattern.compile("\\d+");
Matcher m6 = p6.matcher("22bb33");
System.out.print(m6.find() + " "); //返回true
Matcher m7 = p6.matcher("aa3333");
System.out.print(m7.find() + " "); //返回true
Matcher m8 = p6.matcher("aa3333bb");
System.out.print(m8.find() + " "); //返回true
Matcher m9 = p6.matcher("aabb");
System.out.println(m9.find()); //返回false
// Matcher.start() / Matcher.end() / Matcher.group()
// 当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息
// start()返回匹配到的子字符串在字符串中的索引位置
// end()返回匹配到的子字符串的最后一个字符的下一个位置在字符串中的索引位置
// group()返回匹配到的子字符串
// Java代码示例:
Pattern p7 = Pattern.compile("\\d+");
Matcher m10 = p7.matcher("222xxx333");
System.out.print(m10.find() + " "); //返回true,匹配222
System.out.print(m10.start() + " "); //返回0
System.out.print(m10.end() + " "); //返回3
System.out.println(m10.group()); //返回222
System.out.print(m10.find() + " "); //返回true,匹配333
System.out.print(m10.start() + " "); //返回6
System.out.print(m10.end() + " "); //返回9
System.out.println(m10.group()); //返回333
// start(),end(),group()均有一个重载方法分别为start(int i),end(int i),group(int i)专用于分组操作
// Matcher类还有一个groupCount()用于返回有多少个组
// 捕获组
// 捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建
// 例如,正则表达式 (dog) 创建了一个单一分组,组里包含"d","o",和"g"
// 捕获组是通过从左至右计算其左括号来编号
// 例如,在表达式((A)(B(C))),有四个组:
// ((A)(B(C)))
// (A)
// (B(C))
// (C)
// 可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组
// groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组
// 还有一个特殊的组(group(0)),它总是代表整个表达式,该组不包括在 groupCount 的计数中。
// Java代码示例:
Pattern p8 = Pattern.compile("(\\D+)(\\d+)");
Matcher m11 = p8.matcher("aaa3333bb");
System.out.print(m11.find() + " "); //返回true,匹配aaa3333
System.out.print(m11.groupCount() + " "); //返回2,因为有2组,按括号分组
System.out.print(m11.group() + " "); //返回aaa3333
System.out.println(m11.group(0)); //返回aaa3333
System.out.print(m11.start(1) + " "); //返回0
System.out.print(m11.end(1) + " "); //返回3
System.out.println(m11.group(1)); //返回aaa
System.out.print(m11.start(2) + " "); //返回3
System.out.print(m11.end(2) + " "); //返回7
System.out.println(m11.group(2)); //返回3333
// 有一段文本,里面有很多数字,而且这些数字是分开的
// 现在要将文本中所有数字都提取出来
// Java代码示例:
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("QQ是:456456 电话是:123456789 邮箱是:aaa123@aaa.
没有合适的资源?快使用搜索试试~ 我知道了~
Java算法题总结,供自己学习使用
共52个文件
txt:52个
需积分: 0 0 下载量 17 浏览量
2024-02-20
23:14:47
上传
评论
收藏 55KB ZIP 举报
温馨提示
Java算法题总结,供自己学习使用
资源推荐
资源详情
资源评论
收起资源包目录
java.zip (52个子文件)
java
算法
项目逻辑
两个素数之积.txt 3KB
能力组队.txt 1KB
测试用例.txt 2KB
绘图机器.txt 879B
GPU运算时间.txt 846B
信道分配.txt 5KB
跳过数字四(9进制).txt 955B
APP时段.txt 6KB
首次适应算法分配内存.txt 2KB
伐木工.txt 1KB
寻找身高最接近的朋友.txt 3KB
灰度矩阵.txt 1KB
按身高和体重排序.txt 1KB
最佳适应算法分配内存.txt 4KB
BFS
亲子游戏.txt 4KB
树的层序遍历-BFS-队列.txt 1KB
DFS
解密犯罪时间.txt 2KB
树的深度优先遍历-DFS-递归-栈.txt 2KB
动态规划
wonderland.txt 1KB
玩牌高手.txt 922B
迷宫求解
BFS迷宫求解_最短路径长度.txt 3KB
BFS迷宫求解_最短具体路径.txt 5KB
DFS迷宫求解_所有具体路径.txt 4KB
并查集
聚餐地点.txt 5KB
最大服务器集群.txt 3KB
图像边界.txt 4KB
HashMap
众数和中位数.txt 5KB
滑动窗口
数组连续和.txt 1KB
指定瑕疵度的最长元音字符串.txt 1KB
考勤信息.txt 2KB
分解整数为连续自然数和.txt 2KB
接口成功率最佳时间段.txt 2KB
只有一个字母的最大连续子串长度.txt 974B
数组和字符串
URL拼接.txt 1KB
螺旋矩阵.txt 3KB
英文联想(字符串前缀匹配).txt 1KB
火星文计算.txt 2KB
数组前后交换.txt 1KB
字符串去重和排序进阶.txt 0B
合并区间.txt 3KB
字符串简易压缩的解压.txt 4KB
二分查找.txt 2KB
寻找数组中心索引.txt 3KB
字符串切割,大小写转换和拼接.txt 2KB
停车场最少车辆.txt 621B
字符串去重和排序.txt 1KB
一次交换得最小字符串.txt 962B
字符串中整数最小和.txt 2KB
String.txt 4KB
正则表达式.txt 3KB
正则表达式进阶.txt 8KB
除和取模.txt 0B
共 52 条
- 1
资源评论
(ᵕ̥ㄑ_ᵕ̥̥)
- 粉丝: 22
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功