正则
正则表达式
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
正则规则类型
字符类(默认匹配一个字符)
1. [abc] :只能是a\b\c ;
2. [^abc] : 除了a\b\c 之外的任何字符 ;
3. [a-zA-Z]:a到z,A到Z,包括 ;
4. [a-d[m-p]]:a到d,或m到p,即[a-dm-p] ;
5. [a-z&&[def]]:只能d\e\f 取交集 ;
6. [a-z&&[^bc]]:除b、c之外的a-z的字符,即[ab-z];
7. [a-z&&[^m-p]]:除m-p之外的a-z的字符 ,即[a-lq-z] 。
预定义的字符类(默认匹配一个字符)
1. . 任何字符;
2. \d 一个数字: [0-9] ;
3. \D 表示非数字: [^0-9] ;
4. \s 一个空白字符: [\t\n\x0B\f\r] ;
5. \S 非空白字符 ;
6. \w [a-zA-Z_0-9]英文、数字、下划线 ;
7. \W [^\w] 一个非单词字符。
贪婪的量词 (配合匹配多个字符)
1. x? x出现0或1次 ;
2. x* x出现0或多次;
3. x+ x出现1次或多次;
4. x{n} x必须出现n次;
5. x{n,} x最少出现n次 ;
6, x{n,m} x 最少出现n次,但不超过m次。
用法
字符串提供了匹配正则表达式规则的API。
public boolean matches(String regex);
判断是否匹配正则表达式,匹配为true 则为false;
正则表达式在字符串中的使用
1. public String replaceAll(String regex,String newStr) :
按照正则表达式匹配的内容进行替换新的 字符串;
2. public String[] split(String regex) :
按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组。
Pattern & Matcher
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
Lambda
概述
Lambda 表达式式JDK 8 开始后的一种新语法形式。
作用
简化匿名内部类的代码写法:
(匿名内部类被重写的形参列表) -> {
被重写方法的方法体
}
注:-> 是语法形式,无实际含义。
注:Lambda 表达式只能简化函数式接口的匿名内部类的写法形式。
什么是函数式接口
1. 首先必须是接口,其次接口中有且仅有一个抽象方法;
2. 通常我们会在接口上加一个@FunctionalInterface注解,标记该接口必须满足函数式接口 。
public class TestLambda {
public static void main(String[] args) {
// 简化一
Swimming s = () -> {
System.out.println("小红蝶泳出发");
};
go(s);
// 简化二
go(() -> {
System.out.println("小蓝蝶泳出发");
});
}
public static void go(Swimming s) {
System.out.println("开始。。。");
s.swim();
System.out.println("结束。。。");
}
}
@FunctionalInterface
interface Swimming {
void swim();
}
好处
Lambda式一个匿名函数,我们可以把Lambda表达式理解是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到提升。
常见的可使用Lambda表达式简化的接口
1. 简化Comparator接口 :
public static void main(String[] args) {
Integer[] ages = {66,33,11,77,44};
Arrays.sort(ages,(o1,o2) -> return o2-o1);
System.out.println(Arrays.toString(ages));
}
2. 简化按钮监听器ActionListener接口:
public static void main(String[] args) {
// 代码省略...
JButton btn = new JButton("登录");
btn.addActionListener(e -> System.out.println("触发了按钮"));、
// 代码省略...
}
Lambda 表达式的省略写法 (进一步在Lambda表达式的基础上继续简化)
1. 参数类型可以省略不写;
2. 如果只有一个参数,参数类型可以省略,同时()也可以省略。
3. 如果Lambda表达式的方法体代码只有一行,可以省略大口号不写,同时省略分号;
4. 如果Lambda表达式的方法提代码只有一行,此时如果这行代码式return 语句,必须省略return不写, 同时也必须省略;不写。