一、正则表达式

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不写,同时也必须省略";"不写