Lambda表达式,正则表达式,异常

第七节 正则表示、异常

一、正则表达式

  • 正则表达式其实是由一些特殊的符号组成的,它代表的是某种规则。

作用

  • 用来校验数据格式的正确性
  • 在一段文本中查找满足要求的内容

String提供了一个匹配正则表达式的方法
public boolean matches([String] regex)
判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false。

正则表达式的书写规范
字符类(只匹配单个字符)

[abc]   : 			只能是a, b, 或c
[^abc]   : 		除了a, b, c之外的任何字符
[a-zA-Z]    : 		a到z A到Z,包括(范围)
[a-d[m-p]]  :	 	a到d,或m到p
[a-z&&[def]] :	 	d, e, 或f(交集)
[a-z&&[^bc]] : 	a到z,除了b和c(等同于[ad-z])
[a-z&&[^m-p]] :	 	a到z,除了m到p(等同于[a-lq-z])

预定义字符(只匹配单个字符)

>. 			任何字符
\d 			一个数字: [0-9]
\D 			非数字: [^0-9]
\s 			一个空白字符:
\S 			非空白字符: [^\s]
\w 			[a-zA-Z_0-9]
\W 		 	[^\w] 一个非单词字符

数量词

X? 				X , 一次或0次
X* 				X,零次或多次
X+ 				X , 一次或多次
X {n}		 	X,正好n次
X {n, } 		X,至少n次
X {n,m} 		X,至少n但不超过m次

校验手号码:15678942547 或 010-3456565656
(1[3-9]\d{9})|(0\d{2,7}-?[1-9]\d{4,19})
校验邮箱:4785964894@qq.com
(\w{2,}@\w{2,20}(\.\w{2,10}){1,2})

正则表达式用于搜索替换、分割内容,需要结合String提供的如下方法完成:方法名说明

方法名说明
public String replaceAll(String regex , String newStr)按照正则表达式匹配的内容进行替换
public String[] split(String regex)按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。

二、Lambda表达式

作用:
用于简化匿名内部类代码的书写。

在使用Lambda表达式之前,必须先有一个接口,而且接口中只能有一个抽象方法。(注意:不能是抽象类,只能是接口)

Arrays.sort(students, new Comparator<Student>() {
	@Override
	public int compare(Student o1, Student o2) {
		return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
	}
});
//4.对数组中的元素按照年龄升序排列: 改用Lambda写法
Arrays.sort(students, (Student o1, Student o2) -> {
	return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
});

Lambda表达式简化

1.Lambda的标准格式
(参数类型1 参数名1, 参数类型2 参数名2)->{
…方法体的代码…
return 返回值;
}
2.在标准格式的基础上()中的参数类型可以直接省略
(参数名1, 参数名2)->{
…方法体的代码…
return 返回值;
}
3.如果{}总的语句只有一条语句,则{}可以省略、return关键字、以及最后的“;”都可以省略
(参数名1, 参数名2)-> 结果
4.如果()里面只有一个参数,则()可以省略
(参数名)->结果

//1.使用匿名内部类
Arrays.sort(students, new Comparator<Student>() {
	@Override
	public int compare(Student o1, Student o2) {
	return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
	}
});
//2.使用Lambda表达式表达式——标准格式
Arrays.sort(students, (Student o1, Student o2) -> {
	return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
});
//3.使用Lambda表达式表达式——省略参数类型
Arrays.sort(students, ( o1,  o2) -> {
	return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
});
//4.使用Lambda表达式表达式——省略{}
Arrays.sort(students, ( o1,  o2) -> Double.compare(o1.getHeight(), o2.getHeight()));

三、异常

异常体系
在这里插入图片描述
Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来

Exception:异常,它代表程序可能出现的问题,通常用Exception以及它的孩子来封装程序出现的问题。
运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)

抛出异常(throws):使用throws在方法上声明,意思就是告诉下一个调用者,这里面可能有异常

方法 throws 异常1 ,异常2 ,异常3 ..{
 }
 
// Exception代表可以捕获一切异常
方法 throws Exception{
 }

捕获异常(try…catch)

try{
  // 监视可能出现异常的代码!
}catch(异常类型1 变量){
  // 处理异常
}catch(异常类型2 变量){
  // 处理异常
}...

// 常用方式
try{
   // 可能出现异常的代码!
}catch (Exception e){
   e.printStackTrace(); // 直接打印异常对象的信息
}
 // Exception代表可以捕获一切异常

自定义异常

自定义运行时异常
定义一个异常类继承RuntimeException.
重写构造器。
通过throw new 异常类(xxx)来创建异常对象并抛出。
编译阶段不报错,提醒不强烈,运行时才可能出现!

自定义编译时异常
定义一个异常类继承Exception.
重写构造器。
通过throw new 异常类(xxx)来创建异常对象并抛出。
编译阶段就报错,提醒更加强烈!

// 1、必须让这个类继承自Exception,才能成为一个编译时异常类。
public class AgeIllegalException extends Exception{
    public AgeIllegalException() {
    }

    public AgeIllegalException(String message) {
        super(message);
    }
}

测试类,对age判断如果年龄不在0~150之间,就抛出一个AgeIllegalException异常对象给调用者

public class ExceptionTest2 {
    public static void main(String[] args) {
	//2、在方法中对age进行判断,不合法则抛出AgeIllegalException
    public static void saveAge(int age){
        if(age > 0 && age < 150){
            System.out.println("年龄被成功保存: " + age);
        }else {
            // 用一个异常对象封装这个问题
            // throw 抛出去这个异常对象
            throw new AgeIllegalRuntimeException("/age is illegal, your age is " + age);
        }
    }
}

异常的作用

  • 异常是用来查寻系统Bug的关键参考信息!
  • 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值