一、正则表达式
1.概念
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性
2.正则表达式匹配规则
①字符类(默认匹配一个字符)
[abc] 只能是a或b或c
[^abc] 除了a,b,c以外的其他字符
[a-zA-Z] a-z或A-Z中的一个字符
(默认两个字符之间用‘|’隔开)
&&表示并集,^表示非,则[a-z]&&[^m-p]表示a-z除了m-p
②预定义的字符类(默认匹配一个字符)
. 任何字符
\d 一个数字
\D 非数字
\s 一个空白字符:[\t\n\x0B\f\r]
\S 非空白字符
\w [a-zA-Z_0-9] 英文、数字、下划线
\W [^\w] 一个非单词字符
③贪婪的量词(配合匹配多个字符)
X? X , 一次或根本不
X* X,零次或多次
X+ X , 一次或多次
X {n} X,正好n次
X {n, } X,至少n次
X {n,m} X,至少n但不超过m次
3.public boolean matches(String regex)
判断是否匹配正则表达式,匹配返回true,不匹配返回false。
4.正则表达式在字符串方法中的使用
①public String replaceAll(String regex,String newStr)
按照正则表达式匹配的内容进行替换
②public String[] split(String regex)
按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。
即正则表达式匹配的内容作为分隔符,不出现在字符串数组中,其他被分割开的部分存在字符串数组中
5.正则表达式支持爬取信息
String rs = "来黑马程序学习Java,电话020-43422424,或者联系邮箱" +
"itcast@itcast.cn,电话18762832633,0203232323" +
"邮箱bozai@itcast.cn,400-100-3233 ,4001003232";
// 需求:从上面的内容中爬取出 电话号码和邮箱。
// 1.定义爬取规则
String regex = "(\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2})|" +
"(1[3-9]\\d{9})|(0\\d{2,5}-?\\d{5,15})|400-?\\d{3,8}-?\\d{3,8}";
// 2.编译正则表达式成为一个匹配规则对象
Pattern pattern = Pattern.compile(regex);
// 3.通过匹配规则对象得到一个匹配数据内容的匹配器对象
Matcher matcher = pattern.matcher(rs);
// 4.通过匹配器去内容中爬取出信息
while(matcher.find()){
System.out.println(matcher.group());
}
二、Lambda表达式
1.概述
Lambda表达式是JDK 8开始后的一种新语法形式。
作用:简化匿名内部类的代码写法。
2.Lambda表达式的简化格式
(匿名内部类被重写方法的形参列表) -> {
被重写方法的方法体代码。
}
//注:-> 是语法形式,无实际含义
Lambda表达式只能简化函数式接口的匿名内部类的写法形式
函数式接口:首先必须是接口、其次接口中有且仅有一个抽象方法的形式
可以加上@FunctionalInterface,表示必须是函数式接口
public class LambdaDemo1 {
public static void main(String[] args) {
goSwimming( new Swimming() {
@Override
public void swim() {
System.out.println("铁汁, 我们去游泳吧~");
}
} );
}
public static void goSwimming(Swimming swimming) {
swimming.swim();
}
}
public class LambdaDemo1 {
public static void main(String[] args) {
goSwimming( () -> {
System.out.println("铁汁, 我们去游泳吧~") } );
}
public static void goSwimming(Swimming swimming) {
swimming.swim();
}
}
//Swimming是一个函数式接口
@FunctionalInterface
Interface Swimming{
public void swim();
}
3.Lambda表达式的省略写法
参数类型可以省略不写。
如果只有一个参数,参数类型可以省略,同时()也可以省略。
如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写