设计者模式&正则表达式
1.设计者模式
单例模式: 只有一个实例,保证当前类的对象只能有一个
1、单例模式实现:
1.懒汉式 : 当第一次调用方法获取对象时候,该对象才 创建
2.饿汉式 : 第一次加载类时候,就自动创建该对象
2、实现单例的步骤:
1.构造器私有化
2.私有的静态的该类的引用,存储创建的单例对象
3.公共静态的访问方式(提供一个当前类的对象)
3、在多线程同时访问下,懒汉式会出现获取不同对象的现象,为了安全,使用Synchronized 同步方法
1.Synchronized定义在方法上,使用简单,但是效率较低
2.Synchronized包裹需要同步的代码,使用相对复杂,需要思考包裹哪些代码,但是效率较高。
简单工厂模式
1.抽象产品角色: 具体产品角色实现的接口|继承的父类
2.具体产品角色: 抽象类的实现类
3.工厂角色
代理模式:
静态代理:
真实角色(项目经理,房东)
代理角色(HR,中介…)
真实角色与代理角色持有相同的接口
代理角色持有真实角色的引用: 引用关系通过属性维护
代理行为
2.正则表达式
正则表达式:
正则表达式就是一种特殊的字符串规则,用于匹配字符串使用的
使用正则的要求:
1.明确需求
2.定义正则
3.在语言中使用,在代码中使用
字符集
默认情况下区分大小写。
1.普通字符
非特殊含义以外的字符,如 a b 中国 上海尚学堂 。 普通字符精确匹配
5.2. 元字符与转义
5.3. 字符类
5.3.1. 自定义
由[]组,只匹配一个, 需要注意以下四个:
^: 如果在第一个位置,表示取反的含义。
-表示一个区间即范围
] 最近一个位置为:结束 ,如果要表示普通的]请加
\ 转义
. 在字符类中 不是代表任意的字符,代表自身 . 的含义。 如果需要表示原有的含义,挪动位置 或者\ 。
[ae134] -> a e 1 3 4
[(as)] ->a s ( )
[a-z] ->小写字母
[-]a-z[] -> -[] 及小写字母
默认|标准字符类
-
量词
匹配的过程中,需要指定次数 -
贪婪模式
在匹配次数不定时如* {n,} +,匹配字符越多越好,默认模式即”贪婪模
贪婪模式 greedy(匹配字符越多越好,可回溯) -
?懒惰模式 lazy reluctant (匹配字符越少越好,可回溯)
-
+独占模式 possessive(匹配字符越多越好,不可回溯) 用的较少
阻止贪婪有两种方式
1、 量词后面使用? 2、 使用取反。 -
边界
1)、边界不占用宽度,只是一个界限
2)、^ :开始 \b:单词边界 \B:非单词边界 $:结束
^:多行代表每行头 单行代表整个字符串的开始
$: 多行代表每行尾 单行代表字符串的结尾
\b 匹配前面或后面的不是\w
\B 匹配前面或后面的是\w -
选择符
9.1. 选择符
| ->优先级低 ,满足匹配则停止,不会查找更优的方案
he|hello –>只匹配 he,不匹配 hello
hello|he->匹配 he 与 hello -
零宽断言
(\w+)(?<=ing) –>匹配 singing testing 整个单词 -> 后顾 (\w+)(?=ing) -->匹配 sing test ->前瞻
-
常用类
java.util.regex Pattern Matcher String
一般在查找、替换、分割、组的使用
Pattern
Matcher
//模式器对象 指定使用的正则表达式
Pattern p = Pattern.compile("(\\d{3})(sxt)");
//获取匹配器 指定要匹配的字符串
Matcher matcher = p.matcher("123sxt456sxt7890sxthaha");
//matches 精确完整匹配
System.out.println(matcher.matches()); //false
//find 查找是否有满足条件的子串,如果纯在就返回true,可以继续查找,直到找不到
while(matcher.find()) {
System.out.println(matcher.group());
//group(int) 参数要求正则中有分组情况,可以选择获取当前匹配到子串中某一组中内容
System.out.println(matcher.group(0)+"-->"+matcher.group(1)+"-->"+matcher.group(2));
}