正则表达式、异常

正则表达式

正则表达式介绍:正则是专i门]对字符串处理的一种技术.
String,StringBuilder都是操作字符串,但是他们的功能远远不够,正则表达式出现填补了字符串操作的空白

  • 字符类
    。[abc] 字符匹配abc
    。[a-z]字符串匹配所有的小写字母
    。[a-zA-Z]字符匹配所有的字母
    。[ ^a-z]匹配所以的非小写字母
    。[ ^abc]字符匹配不是abc
    。[a-zA-Z0-9_]字符匹配所有的字母,数字和下划线
    。[ ^a-zA-Z0-9_]字符匹配不是字母,不是数字,不是下划线
  • 预定义字符
    . 匹配任意字符
    。[\w] 匹配所有的单词字符,等同于[a-zA-Z0-9_]
    。[\W] 匹配所有的非单词字符,等同于[Ma-ZA-Z0-9_]
    。[\d] 匹配所有数组,等同于[0-9]
    。[\D] 匹配非数字,等同于[ ^0-9]
  • 次数类
    。X?这个字符X,出现的次数,一 次或者一次也没有
    。X*这个字符X,出现零次或者多次
    。X+这个字符X,出现-一次或者多次
    。X{m} 这个字符X,出现正好m次
    。X{m,}这个字符X,出现至少m次
    。X{m,n}这个字符X,出现至少m次,但是不超过n次
正则表达式匹配方法

String类的方法matches

  • boolean matches(String reg)
    。正则表达式验证的方法
    。参数传递正则的规则
    。字符串和规则匹配,返回true
public static void main(String[] args) {
	boolean b = checkQQ( "123456");
	System. out . println() ;
	b = checkNumber("13800138000");
	System. out. println(b);
}
	/*
	*定义方法,验证QQ号码
	*验证通过返回true,否则返回false
	*全数字,不能0开头,位数6-10位
	*/
public static boolean checkQQ(String qq) {
	//正则表达式,定义QQ号码规则
	//QQ号码第一位是数字 ,不能0开头
	//QQ号码第二位,必须数字
	//QQ号码第三位,数字
	String reg = "[1-9][0-9]{5,9}";
	return qq . matches(reg);
}
	/*
	*验证手机号
	*全数字,1开头,必须11位第二位不能是012
	*13800138000
	*/
public static boolean checkNumber(String number) {
	//定义手机号规则
	String reg = "1[3-9][0-9]{9}";
	return number . matches(reg);
}
正则表达式切割方法

String类的方法split
。按照指定的正则表达式进行切割
。参数reg传递正则表达式

public static void main(String[] args) {
	//正则表达式对字符串切割
	String str = "ab1 23cd45ef999909gh" ;
	//按照数字,对字符串切割
	String[] array = str .split("[\\d]+");
	string ip = "10....1...........18.28";
	string[] array = ip.split("\\.+");
	//System. out . println( array.length);
	for(int i = 0 ;i< array.length ; i++) {
	System . out. println(array[i]);
	}
}
正则表达式替换方法

String类的方法 replaceAll()

String replaceAll(" 正则规则","要替换内容")
public static void main(String[] args) {
	String str ="assdfg23432ewge098765rewg3232ewflkjjf12321lw";
	//字符串的所有数组,替换为一个#
	string rep = str. replaceA11("\\d+""#");
	System. out. println(rep);
}
异常

异常概念:程序在运行过程中,出现的不正常现象,就是异常
异常也是对象:都是由异常类产生的
Java语言的异常的继承体系

  • java. lang. Throwable所有异常和错误的父类
    。java. lang. Error所有错误的父类
    。java. lang. Exception所有异常的父类
    。java.1 ang. RuntimeException 运行时异常
  • Error错误和Exception异常的区别
    。Error错误:理解人病了,非典,艾滋,癌症,等死
    程序一旦发生错误,根本运行不了,修改源码
    。Exception异常:阑尾炎,感冒,划伤,治好以后和以前一样
    程序一旦发生异常,处理完,继续执行
Throwable类的方法

所有的异常和错误都是子类, Throwable类的方法,都会被继承使用

  • String toString() 返回异常信息的简短描述
  • String getMessage() 返回异常信息的详细信息
  • void orintStackTrace()将异常信息,追踪到标准错误流(目前,方法可以异常信息输出在控制台)
public static void main(String[] args) {
	//异常信息的用法
	try {
		get();
	}catch( ArrayIndexoutOfBoundsException ex) {
		//方法toString()异常信息的简短描述
		System. out . println(ex); // java. lang . ArrayIndexbutOfBoundsException: 3
		//方法getMessage()异常信息的详细描述
	String message = ex. getMessage();
	System . out. println(message); // 3
	//printStackTrace()
	ex .printStackTrace();
	}
}
public static void get( ) {
	int[ ] arr={1,2};
	System. out . println(arr[3]);
}
异常引发过程和JVM默认处理机制

异常信息输出打印,停止程序的允许

pub1ic static void main(String[] args) {
	int[] arr = {1,2,3};
	int i = getArray(arr);
	System. out. print1n(i);
	System. out. println("程序结束");
}
pub1ic static int getArray(int[] arr) {
	return arr[5];
}

在这里插入图片描述

异常的处理方式try catch
  • try{} catch(){异常的处理
    语法格式:
try{
	//被检测的代码,或者是可能出现异常代码
}catch(异常类的名字 变量){
	//异常的处理方式 
	//变量,循环,new对象,调用方法
}
public static void main(String[] args) {
	int[] arr = {1,2,3};
	try {
		int i = getArray(arr);,
		System. out . println(i);
	}catch(Exception e) {
		System. out . println("异常被处理了");
	}
	System. . out . println("程序结束");
}
public static int getArray(int[] arr) {
	return arr[5];
}

在这里插入图片描述

  • try{}catch(){}异常的处理,多catch并行处理
  • 语法格式:
try{
 	//被检测的代码,或者是可能出现异常代码
}catch(异常类的名字 变量){
	 //异常的处理方式 
 	//变量,循环,new对象,调用方法
}catch(异常类的名字 变量){
	//异常的处理方式
}

。多catch并行处理catch中的异常类名,写法很关键
两个类之间,没有继承关系,顺序随意
两个类之间,存在继承关系,父类写在最后面

public static void main(String[] args) {
	//多catch并行处理,抓异常
	try {
		get(10);
	}catch(NullPointerException ex) {
		System. out . println("处理了空指针异常");
	}catch(ArrayIndexOutOfBoundsException ex) {
		System. out . println("处理了数组越界异常") ;
	}
}
		/*
	*定义方法,传递参数int类型
	*参数变量i的值是0 ,方法出现空指针异常
	*参数变量i的值非0 ,方法出现数组越界异常
	*/
public static void get(int i) {
	if(i==0){
		int[] arr = nu1l;
		System . out . println(arr[0]);
	}
	if(i!=0){
		int[] arr= {1,2};
		System. out . println(arr[3h]) ;
	}
}
finally代码块

finall代码块,是跟随try catch出现的,凡是写在finally代码块里的程序,必须运行
作用:释放资源

pub1ic static void main(string[] args) {
	//异常信息的用法
	try {
		get();
	}catch(ArrayIndexoutofBoundsException ex) {
		ex. printstackTrace();
	}finally {
		system. out. println("无论如何都运行");
	}
}
public static void get() {
	int[] arr = {1,2};
	System. out. println(arr[1]);
}
throw和throws
  • throw抛出的意思,只能作用在方法里面,表示方法中会出现异常
  • throws 抛出的意思,只能作用在方法的定义上,告知调用者,我有异常
/*
*遇到调用异常的方法,throws继续抛出,还是try捕获
*持久层抛出,业务层捕获
*/
public static void main(String[] args) {
	/*
	*调用了一个抛出异常的方法
	*必须处理,编译失败
	*种在方法上,继续throws,异常抛到JVM
	*/
	try {
		buy(0);
	}catch(Exception ex) {
		System. out . println("异常被处理“) ;
	}
	System. out. println("程序结束");
}
	/*
	*方法演示
	*定义方法,传递参数(钱),方法的作用是买饭
	*方法的参数有问题,功能不能实现
	*将方法内部异常,表现出来,告诉调用者
	*关键字throws后面写的是异常类的类名
	*/
pub1ic static void buy(int money) throws Exception{
	if(money <= 0){ 
		//抛出异常 throw关键字抛出的是异常对象
		throw new Exception( ) ;
	}
}
异常分类
  • 编译异常
    。当我们调用了一个抛出异常的方法调用者必须处理 要是不处理编译失败
    。处理方式try catch也可以使用throws
  • 运行异常
    。凡是RuntimeException类和他的所有子类全都是运行异常
    。方法中如果抛出的异常是运行异常,方法的声明上不需要使用throws关键字
    。方法调用者,是看不到方法内部有异常
    。调用者调用方法,不要处理这个异常
    。运行时期的异常,不能处理,一旦发生,程序人员必须修改源码
    。RuntimeException子类:
    ·数组越界、空指针异常、类型转换异常(ClassCastException)、无效参数异常
public static void main(String[] args) {
}
	/*
	*方法内部,抛出异常是运行异常
	*/
public static void get(){
	throw new RuntimeException();
}
子类父类的异常处理
  • 父类方法抛出异常
    。子类继承父类,重写方法后,异常可以不抛
    。子类继承父类,重写方法后,如果子类要抛异常,抛出的异常不能大于父类的
  • 父类方法不抛异常
    。子类继承父类,重写方法后不能抛出异常
    。如果子类调用了一-个抛出异常的方法,子类只能是try_ catch处理
自定义异常

JDK中不可能将开发中所有的异常现象,全部定义完毕如果遇到DK中没有定义的异常类需要我们自己定义
例子:计算三个科目的平均分,数学、语文、英文.调用者调用方法,错误传递参数 成绩平均分无法计算的.JDK中不可能提供成绩异常
自定义异常:创建一个类,继承父类(Exception或者RuntimeException).选择继承哪种异常,判定点:如果程序中出现了自定义异常,是否要让程序继续执行,还是直接挂掉修改源码

public static void main(String[] args) {
	int i = avg(-10, 20, 30);
	System. out . println(i);
}
public static int avg(int math , int chinese ,int english) {
	//对参数进行安全性判断
	if(math > 100 || math < 0)
	//成绩不存在,抛出异常
		throw new ScoreException(" 数学成绩错误:"+ math);
	if(chinese > 100|| chinese < 0)
		throw new ScoreException(" 语文成绩错误:"+ chinese);
	if(english > 100|1 english < 0)
		throw new ScoreException("英语成绩错误:"+ english);
	return (math + chinese + english) / 3;
}
public class ScoreException extends RuntimeException{
	/*
	*RuntimeException(String message) 继承父类的构造方
	*接收一个异常的消息
	*/
	pub1ic ScoreException(String s) {
	//异常消息s传递到父类构造方法
	//子类构造方法,调用父类构造方法super
	super(s);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值