正则表达式
正则表达式介绍:正则是专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);
}
}