java中的正则表达式和异常

正则表达式:


作用一:用来校验数据格式是否合法

作用二:在文本中查找满足要求的内容

不用正则表达式:检验QQ号是否合法,要求全部是数字,长度在6-20,不能以0开头

public class test {
    public static void main(String[] args) {
        //检验QQ号是否合法,要求全部是数字,长度在6-20,不能以0开头
        String qq="12345678";
        System.out.println(checkqq(qq));//true
        String qq2="24253fsaf";
        System.out.println(checkqq(qq2));//false
        
        
        
    }
    public static boolean checkqq(String qq)
    {
        //1判断qq是否为空
        if(qq==null||qq.length()<6||qq.length()>20||qq.startsWith("0"))
        {
            return false;
        }
        for (int i = 0; i < qq.length(); i++) {
            char c=qq.charAt(i);
            if(c<'0'||c>'9')
            {
                return false;
            }
        }
        return true;
    }
}

String提供了一个匹配正则表达式的方法

public boolean matches(String regex)//判断字符串是否符合正则表达式,符合返回true

正则表达式的规则:

这里面的X就是上面两张图片的内容  

"(?!)abc"-->abc忽略大小写 

例子1:校验数据格式是否合法

public class test2 {
    public static void main(String[] args) {
        //checkPhone();
        checkEmail();

    }
    public static void checkPhone()
    {
        Scanner sa=new Scanner(System.in);
        while (true) {
            System.out.println("请输入手机号或者座机号");
            String phone=sa.nextLine();
            //18288997799  //010-3525252 0105262366
            if(phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?\\d{4,19})"))
            {
                System.out.println("你输入的手机号或座机号有效");
                break;
            }
            else {
                System.out.println("你输入的手机号或座机号无效");
                continue;
            }
        }
    }
    public static void checkEmail()
    {
        Scanner sa=new Scanner(System.in);
        while (true) {
            System.out.println("请输入邮箱号");
            String phone=sa.nextLine();
            //deilfa225@163.com
            //414242532@qq.com
            //iamhh@hh.com.cn
            if(phone.matches("\\w{2,}@\\w{2,10}(\\.\\w{2,10}){1,2}"))
            //  单独的一个点.是通配字符,要加上转义字符\告诉它就是一个点,还要再加一个\告诉第一个\你就是单纯的转义字符\,
                //不然\.会看成一个整体,这样会报错
            {
                System.out.println("你输入的邮箱号有效");
                break;
            }
            else {
                System.out.println("你输入的邮箱号无效");
                continue;
            }
        }
    }
}

 例子二:在文本中查找满足要求的内容

步骤:
1:定义爬取规则

2:把正则表达式封装成Patter对象

3:通过Patter对象去获取查找内容的匹配器对象

4:定义一个循环开始爬取信息(matcher.find()有内容返回true)

public class test3 {
    public static void main(String[] args) {
        String data="i am hhh,\n"
                +"my phone is 18388889344 and 18277889933,\n"
                +"my email is 147889900@qq.com and iamhh@hh.com.cn and deilfa225@163.com,\n"
                +"我的座机电话是:010-353463,\n"
                +"热线电话:400-519-8060";
        //1:定义爬取规则
        String regex="(1[2-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})"
                +"|(\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2})"
                +"|(400-?\\d{3,7}-?\\d{3,7})";
        //2:把正则表达式封装成Patter对象
        Pattern patter= Pattern.compile(regex);
        //3:通过Patter对象去获取查找内容的匹配器对象
        Matcher matcher= patter.matcher(data);
        //4:定义一个循环开始爬取信息
        while(matcher.find())
        {
            String rs= matcher.group();
            System.out.println(rs);
        }
    }
}

 结果:

例子三:正则表达式用于搜索替换,分割内容,需要结合String提供的方法

public String replaceAll(String regex, String replacement)

 按照正则表达式匹配的内容进行替换

public String[] split(String regex)

按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组 

参数regex是 以regex 为分割符

public class test4 {
    public static void main(String[] args) {
        //1:把:危险啊afaga阿凡提wwaf别别,中间的非中文字符替换成“-”
        String data="危险啊afaga阿凡提wwaf别别";
        String regex="\\w+";
        String replaced = data.replaceAll(regex, "-");
        System.out.println(replaced);

        //2:把:我我喜喜喜喜喜喜欢欢欢你!  替换成 我喜欢你!
        String data2="我我喜喜喜喜喜喜欢欢欢你";
        System.out.println(data2.replaceAll("(.)\\1+","$1"));
        /*
        1 一个.可以匹配任意通配符,(.)代表一组,即一个字为一组
        2 \\1表示该组的组号为1
        3 +表示该组出现1次或多次
        4 $1则可以取到第一组中的内容
        */

        //3:把  危险啊afaga阿凡提wwaf别别 中的中文提取出来
        String data3="危险啊afaga阿凡提wwaf别别";
        String[] split = data.split("\\w+");//参数regex是以什么为分割符
        System.out.println(Arrays.toString(split));//[危险啊, 阿凡提, 别别]

    }
}

 异常:

运行时异常:
RunTimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常

编译时异常:
编译阶段就会出现错误提醒

异常的处理:

抛出异常(throws)

在方法上使用throws关键字,可以将方法内部的异常抛给调用者处理

捕获异常(try..catch)

直接捕获程序出现的异常

自定义异常:

自定义运行异常 

定义一个异常类来继承RunTimeEexception

重写构造器

通过throw new 异常类(xx) 来创建异常对象并抛出

定义一个异常类:

package yi_chang;
//1:继承RunTimeException类
public class AgeillegalRunTimeException extends  RuntimeException{
    //2:重写构造器


    public AgeillegalRunTimeException() {
    }

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

public class test {
    public static void main(String[] args) {
        //获取一个合法年龄
        try {
            saveAge(200);
        }catch (Exception e)
        {
            e.printStackTrace();
            System.out.println("你输入的年龄不合法");
        }
    }
    public static void saveAge(int age)
    {
        if(age>=0&&age<=180)
        {
            System.out.println(age+"被保存");
        }
        else
        {
            //3:抛出异常对象
            throw new AgeillegalRunTimeException(" age is illeegal "+age);
        }
    }
}

结果:

自定义编译时异常

定义一个异常类继承Exception

重写构造器

 通过throw new 异常类(xx) 来创建异常对象并抛出

 

//1:继承Exception类
public class AgeillegalException extends Exception{
    //2重写构造器


    public AgeillegalException() {
    }

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

}
public class test {
    public static void main(String[] args) {
        //获取一个合法年龄
        /*try {
            saveAge(200);
        }catch (Exception e)
        {
            e.printStackTrace();
            System.out.println("你输入的年龄不合法");
        }*/
        try {
            saveAge(20);
        }catch (Exception e)
        {
            e.printStackTrace();
            System.out.println("你输入的年龄不合法");
        }
        }
    public static void saveAge(int age) throws AgeillegalException//把该异常抛给调用该方法的地方
    {
        //3:抛出异常对象
        //throw new AgeillegalRunTimeException(" age is illeegal "+age);
        if(age>=0&&age<=180)
        {
            System.out.println(age+"被保存");
        }
        else
            throw new AgeillegalException(" age is illeegal "+age);
    }
}

尝试修复异常:
 

public class test2 {
    public static void main(String[] args) {
        //尝试修复异常

        while (true) {
            try {
                getMoney();//一旦接收到异常不执行break语句,直到没有异常产生
                break;
            } catch (Exception e) {
                System.out.println("请你输入合适的价格!");
            }
        }
    }
    public static void getMoney()
    {
        Scanner sa=new Scanner(System.in);
        System.out.println("请输入合适的价格");
        while(true)
        {
            double d=sa.nextDouble();
            if(d>0.0)
            {
                System.out.println("输入正确");
            }
            else
            {
                throw new MoneyillegnalRunTimeException("价格不合法");
            }
        }
        
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/520746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手机扫码查看视频如何实现?扫描二维码在线看视频的制作技巧

现在的学校或者幼儿园会需要拍摄学生的视频&#xff0c;然后展示给其他人查看&#xff0c;为了能够方便用户能够快速的获取文件内容&#xff0c;所以经常会通过生成视频二维码的方法&#xff0c;将二维码分享之后手机扫码来获取视频内容&#xff0c;有效提升用户获取内容的体验…

PTA C 1050 螺旋矩阵(思路与优化)

本题要求将给定的 N 个正整数按非递增的顺序&#xff0c;填入“螺旋矩阵”。所谓“螺旋矩阵”&#xff0c;是指从左上角第 1 个格子开始&#xff0c;按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列&#xff0c;满足条件&#xff1a;mn 等于 N&#xff1b;m≥n&#xff1b;且…

160.相交链表

题目描述 解题思路 ————看评论区大神的思路———— 设「第一个公共节点」为 node &#xff0c;「链表 headA」的节点数量为 aaa &#xff0c;「链表 headB」的节点数量为 bbb &#xff0c;「两链表的公共尾部」的节点数量为 ccc &#xff0c;则有&#xff1a; 头节点 …

CSS设置字体样式

目录 前言&#xff1a; 1.font-family&#xff1a; 2.font-style&#xff1a; 3.font-weight&#xff1a; 4.font-size&#xff1a; 5.font-variant&#xff1a; 6.font&#xff1a; 前言&#xff1a; 在网页中字体是重要的组成部分&#xff0c;使用好字体可以让网页更…

第一次在msf控制台中运行search命令提示Module database cache not built yet问题解决

0x00 问题描述 在新装的kali虚拟机中使用msfconsole执行search命令时提示Module database cache not built yet问题&#xff0c;显然&#xff0c;是我们相关的数据库缓存存在问题。 故障现象&#xff1a; 0x01 启动数据库服务 msf中的search功能是基于postgresql来实现的&am…

python学习25:python中的元组(tuple)

python中的元组(tuple) 1.什么是元组&#xff1f; 元组也是容器数据类型的一种&#xff0c;同列表几乎是一样的&#xff0c;都是可以在里面封装多个&#xff0c;不同类型的元素在内&#xff1b;与列表最大的不同就是&#xff1a; 元组一旦被定义&#xff0c;就不能修改 2.元组…

物理层习题及其相关知识(谁看谁不迷糊呢)

1. 对于带宽为50k Hz的信道&#xff0c;若有4种不同的物理状态来表示数据&#xff0c;信噪比为20dB 。&#xff08;1&#xff09; 按奈奎斯特定理&#xff0c;信道的最大传输数据速率是多少&#xff1f;&#xff08;2&#xff09; 按香农定理&#xff0c;信道的最大传输数据速度…

Java设计模式—享元(FlyWeight)模式

享元模式&#xff08;Flyweight&#xff09;&#xff0c;运用共享技术有效地支持大量细粒度的对象 public abstract class Piece {protected PieceColor m_color;protected PiecePos m_pos;public Piece(PieceColor color ,PiecePos pos){m_color color;m_pos pos;}public ab…

Java笔试总结

. 操作系统中关于竞争和死锁的关系下面描述正确的是&#xff1f; A 竞争一定会导致死锁 B 死锁一定由竞争引起 C 竞争可能引起死锁 D 预防死锁可以防止竞争 答案: C 进程的控制信息和描述信息存放在()。 A JCB B PCB C AFT D SFT 答案: B 当系统发生抖动&#xff08;thrash…

元宇宙虚拟空间的场景的渲染(五)

前言 该文章主要讲元宇宙虚拟空间的场景的渲染&#xff0c;基本核心技术点&#xff0c;不多说&#xff0c;直接引入正题。 场景的渲染 下面第二个图中的代码是一个循环渲染逻辑&#xff0c;首先getDelta 获取2次时间的时间间隔&#xff0c;requestAnimationFrame请求我们的一…

Qt Creator 界面

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、认识 Qt Creator 界面 1、总览 2、左边栏 3、代码编辑区 4、UI设计界面 5、构建区 一、认识 …

99%的人不知道,Oracle resetlogs强制开库需要推进SCN?

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

算法---分治(归并排序)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享分治算法关于归并排序的专题 对于归并排序在我个人主页专栏 <排序> 有详细的介绍 如果有不足的或者错误的请您指出! 1.归并排序 题目: 排序数组 1.1解析 关于归并排序…

STM32使用HAL库获取GPS模块HT1818Z3G5L信息(方法1)

1、写在最前 先了解一下GPRMC的格式 格 式&#xff1a; GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50 说 明&#xff1a; 字段 0&#xff1a;$GPRMC&#xff0c;语句ID&#xff0c;表明该语句为Recommended Minimum Specific GPS/TRANSIT Data&…

Open CASCADE学习|在给定的TopoDS_Shape中查找与特定顶点 V 对应的TopoDS_Edge编号

enum TopAbs_ShapeEnum{TopAbs_COMPOUND,TopAbs_COMPSOLID,TopAbs_SOLID,TopAbs_SHELL,TopAbs_FACE,TopAbs_WIRE,TopAbs_EDGE,TopAbs_VERTEX,TopAbs_SHAPE}; 这段代码定义了一个名为 TopAbs_ShapeEnum 的枚举类型&#xff0c;它包含了表示不同几何形状类型的常量。这些常量通常…

通过学习mayfly-go,我学会了前端如何优雅设计字典值

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen shigen在假期的最后一天早晨起来&#xff0c;翻看了一下博客&#xff0c;一个ma…

spring注解驱动系列--声明式事务

一、环境搭建 一、导入依赖 <!-- 数据源、数据库驱动、spring-jdbc模块--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.12.RE…

Dockerfile详解构建镜像

Dockerfile构建企业级镜像 在服务器上可以通过源码或rpm方式部署Nginx服务&#xff0c;但不利于大规模的部署。为提高效率&#xff0c;可以通过Dockerfile的方式将Nginx服务封装到镜像中&#xff0c;然后Docker基于镜像快速启动容器&#xff0c;实现服务的快速部署。 Dockerf…

统一网关 Gateway(黑马程序员)

网关的技术实现 在 SpringCloud 中网关的实现包括两种&#xff1a; gatewayzuul Zuul 是基于 Servlet 的实现&#xff0c;属于阻塞式编程。而 SpringCloudGateway 则是基于 Spring5 中提供的 WebFlux &#xff0c; 属于响应式编程的实现&#xff0c;具备更好的性能。 网关的作…

火柴排队(c++实现)

题目 涵涵有两盒火柴&#xff0c;每盒装有 n 根火柴&#xff0c;每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列&#xff0c;同一列火柴的高度互不相同&#xff0c;两列火柴之间的距离定义为&#xff1a; 其中 ai 表示第一列火柴中第 i 个火柴的高度&#xf…