java中的正则表达式和异常

news2024/11/17 2:59:23

正则表达式:


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

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

不用正则表达式:检验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("价格不合法");
            }
        }
        
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫-爬取药膳食谱数据

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

顺序表的应用之通讯录

学习了顺序表之后&#xff0c;我们也得知道它的实际用途吧&#xff01;所以&#xff0c;我们今天来学习一下通讯录的实现。 typedef struct personInfo SLDataType; contact.h #define NAME_MAX 20 #define GENDER_MAX 20 #define GTEL_MAX 20 #define ADDR_MAX 100 #include&…

post请求爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

复现ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 项目代码https://github.com/THUDM/ChatGLM-6B 权重开放:…

VMware Workstation Pro 全屏模型隐藏上方命令栏

点击命令栏左侧的小图标&#xff0c;可以隐藏或固定命令栏。 如果要取消白线&#xff0c;参考&#xff1a; 虚拟机全屏后隐藏vmware菜单栏的问题

【KLEE】使用Docker安装KLEE KLEE的简单使用 KLEE的约束文件

本文架构 零、前言一、KLEE简介二、Docker安装KLEE1. 使用apt安装docker2.拉取klee镜像3.使用git 拉取klee源码4.安装klee镜像5. 运行镜像 三、试用KLEE的examples1.查看并了解待测文件examples/get_sign/get_sign.c2.KLEE进行符号测试的基本步骤编译成LLVM位码文件使用KLEE进行…

爬取微博热搜榜

需求&#xff1a; 利用python和xpath爬取微博热搜榜 步骤&#xff1a; 爬虫的步骤 获取网页数据-》分析网页数据-》提取网页数据。 1&#xff0c;首先获取微博热搜数据。 热搜主页为 https://s.weibo.com/top/summary?caterealtimehot 打开收&#xff0c;按F12获取网页源…

FebHost:墨西哥.MX域名概述

墨西哥&#xff0c;这片充满生机与历史的国度&#xff0c;以其丰富的文化传统、诱人的美食以及壮丽的自然景观吸引着世界各地的游客。从古老的阿兹特克和玛雅文明到现代都市的繁华街区&#xff0c;墨西哥为每一位访客和当地居民提供了一场视觉与感官的盛宴。 关于 .MX 域名 作…

特征值与特征向量的关系,Au=λu

特征值与特征向量的关系在线性代数中是一个核心概念&#xff0c;尤其在处理矩阵和线性变换时。给定一个矩阵 A A A&#xff0c;如果存在一个非零向量 u u u和一个标量 λ \lambda λ&#xff0c;使得 A u λ u Au \lambda u Auλu&#xff0c;那么我们就说 λ \lambda λ是矩…

docker使用arthas基本教程

供参考也是自己的笔记 docker容器下使用遇到的问题&#xff1a;大致是连接不上1号进程 我这边主要的问题是用户权限问题&#xff0c;docker容器使用aaa用户启动&#xff0c;那个在docker容器内&#xff0c;需要使用aaa用于启动 docker 容器如何使用arthas #实现下载好arthas …

【LeetCode】--- 动态规划 集训(二)

目录 一、63. 不同路径 II1.1 题目解析1.2 状态转移方程1.3 解题代码 二、931. 下降路径最小和2.1 题目解析2.2 状态转移方程2.3 解题代码三、174. 地下城游戏3.1 题目解析3.2 状态转移方程3.3 解题代码 一、63. 不同路径 II 题目地址&#xff1a; 不同路径 II 一个机器人位于…

2024年N1叉车司机证模拟考试题库及N1叉车司机理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年N1叉车司机证模拟考试题库及N1叉车司机理论考试试题是由安全生产模拟考试一点通提供&#xff0c;N1叉车司机证模拟考试题库是根据N1叉车司机最新版教材&#xff0c;N1叉车司机大纲整理而成&#xff08;含2024年…

『VUE』13. Class绑定(详细图文注释)

目录 动态和静态类结合采用数组的方式引入数组语法的动态类名代码演示总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 首先样式类定义 <style> .active {font-size: 50px; } .text-danger {color: red; } </style&g…

一文带你理解完Git知识点

文章目录 Git基础概念Git基本操作**0. 初始化仓库****1. add到暂存区****2. 再commit到本地仓库****3. 推送到远程仓库****4. 拉取远程仓库****5. 撤销更改** Git分支管理1. 创建分支命令2. 切换分支命令3. 摘取提交4. 删除分支命令5. 合并分支命令6. 变基 Git进阶1. **git tag…

计算机网络 实验指导 实验8

三层交换机的访问控制 1.实验拓扑图&#xff1a; 名称接口IP地址网关Switch AF0/1192.168.1.1/24F0/2172.1.1.1/24Switch BF0/1192.168.1.2/24F0/2172.2.2.1/24PC1172.1.1.2/24172.1.1.1PC2172.1.1.3/24172.1.1.1PC3172.2.2.2/24172.2.2.1PC4172.2.2.3/24172.2.2.1 2.实验目的…

Stable Diffusion介绍

Stable Diffusion是一种前沿的开源深度学习模型框架&#xff0c;专门设计用于从文本描述生成高质量的图像。这种称为文本到图像生成的技术&#xff0c;利用了大规模变换器&#xff08;transformers&#xff09;和生成对抗网络&#xff08;GANs&#xff09;的力量&#xff0c;以…

PPT在线压缩工具推荐

有时候使用邮箱发送邮件时&#xff0c;添加的PPT、Word、PDF文档总会因为过大而转为其他类型的附件发送&#xff0c;不仅上传缓慢&#xff0c;对方查收下载时还有有效期限制&#xff0c;7天或15天后就过期再也无法下载了&#xff0c;有没有什么办法可以压缩PPT等文档&#xff0…

基于单片机光伏太阳能跟踪系统设计

**单片机设计介绍&#xff0c;基于单片机光伏太阳能跟踪系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机光伏太阳能跟踪系统的设计&#xff0c;旨在通过单片机技术实现对光伏太阳能设备的自动跟踪&#xff0c;以提高太阳…

五款户外运动耳机推荐,让你畅享户外运动时光

在繁忙的都市生活中&#xff0c;我们常常被各种琐事所困扰&#xff0c;以至于忘记了自然的美丽与宁静。然而&#xff0c;当我们走近大自然&#xff0c;放下心中的烦恼&#xff0c;我们会发现&#xff0c;自然是我们最好的治愈师。热爱自然的朋友们&#xff0c;这里有一份运动耳…

linux进阶篇:磁盘管理(一):LVM逻辑卷基本概念及LVM的工作原理

Linux磁盘管理(一)&#xff1a;LVM逻辑卷基本概念及LVM的工作原理 一、传统的磁盘管理 在传统的磁盘管理方案中&#xff0c;如果我们的磁盘容量不够了&#xff0c;那这个时候应该要加一块硬盘&#xff0c;但是新增加的硬盘是作为独立的文件系统存在的&#xff0c;原有的文件系…