【java】【高级拓展1】常见算法正则表达式异常

news2024/9/25 11:13:27

目录

1 算法

1.1 简单认识算法

1.2 常见算法 - 排序算法

 1.2.1 冒泡排序

1.2.2 选择排序 

1.3 常见算法-查找算法

1.3.1 基本查询(顺序查找)==不好(性能不好)

 1.3.2 二分查找(折半查找)

2 正则表达式

2.1 概述、初体验

2.1.1 作用一 检验数据合法性

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

2.2 书写规范

2.3 应用案例

2.4 用于查找信息

2.5 用于搜索替换、分隔内容

3 异常 (就是代表程序出现问题)

3.1 认识异常

3.1.1 运行时异常

3.1.2 编译时异常 

3.2 自定义异常

3.2.1 自定义运行异常

3.2.2 自定义编译异常

3.3 异常的处理


前言:java的算法(排序算法、查找算法)、正则表达式

1 算法

1.1 简单认识算法

  

1.2 常见算法 - 排序算法

 

 

 1.2.1 冒泡排序

package com.runa;



import java.util.Arrays;

public class TestBubble {
    public static void main(String[] args) {
        // 1 准备一个数组
        int[] arr = {5, 2, 3, 1};

        // 2 定义一个循环控制 排几轮
        for (int i = 0; i < arr.length - 1; i++) {
            // i = 0  1  2      【5, 2, 3, 1】   次数
            // i = 0  第一轮       0   1  2        3
            // i = 1 第二轮        0   1           2
            // i = 2 第三轮        0               1

            // 3 定义一个循环控制器每轮比较几次
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 判断当前位置的值,是否大于后一个位置处的元素之,如果打则交换
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;

                }

            }

        }
        System.out.println(Arrays.toString(arr));
    }
}

 

1.2.2 选择排序 

 

package com.runa;

import java.util.Arrays;

public class TestSelect {
    public static void main(String[] args) {
        TestSelect  a = new TestSelect();
        a.select1();
        a.select2();
    }

    public void select1(){
        // 1 准备好一个数组
        int[] arr = {5, 1, 3, 2};
        //           0  1  2  3

        // 2 控制选择几轮
        for (int i = 0; i < arr.length - 1; i++) {
            // i = 0   j =   1   2   3
            // i = 1   j =   2   3
            // i = 2   j =   3

            // 3 控制没来选择几次
            for (int j = i + 1; j < arr.length; j++) {
                // 判断当前位置是否大于后面位置处的元素值,大于则交换
                if(arr[i] > arr[j]){
                    int temp = arr[i];
                    arr[i] =arr[j];
                    arr[j] = temp;
                }


            }

        }
        System.out.println(Arrays.toString(arr));

    }

    public void select2(){
        // 1 准备好一个数组
        int[] arr = {5, 1, 3, 2};
        //           0  1  2  3

        // 2 控制选择几轮
        for (int i = 0; i < arr.length - 1; i++) {
            // i = 0   j =   1   2   3
            // i = 1   j =   2   3
            // i = 2   j =   3
            int minIndex = i;
            // 3 控制没来选择几次
            for (int j = i + 1; j < arr.length; j++) {
                // 判断当前位置是否大于后面位置处的元素值,大于则交换
                if(arr[minIndex] > arr[j]){
                    minIndex = j;
                }
            }
            // 决定是否交换
            if(i != minIndex){
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }

        }
        System.out.println(Arrays.toString(arr));

    }

}

 

 

1.3 常见算法-查找算法

1.3.1 基本查询(顺序查找)==不好(性能不好)

 1.3.2 二分查找(折半查找)

 

 

 

 

 

 

 

 

 

 

package com.runa;

public class TestBinary {
    public static void main(String[] args) {
        // 1 准备好一个有序数组
        int[] arr = {7, 23, 79, 81, 103, 127, 131, 147};
        System.out.println(binarySearch(arr, 81));
    }
    public static int binarySearch(int[] arr, int data){
        // 1 定义2个变量,一个在左边,一个在右边
        int left = 0;
        int right = arr.length - 1;

        // 2 定义一个循环控制折半
        while(left <= right){
            // 3 每次折半, 都算出中间位置处索引
            int middle = (left + right) / 2;
            // 4 判断当前要找的元素值,与中间位置处的元素值的大小情况
            if(data < arr[middle]){
                //5 往左边找, 截止位置(右边位置) = 中间位置 - 1
                right = middle - 1;
            }else if(data > arr[middle]){
                // 往右边找,起始位置(左边位置) = 中间位置 +  1
                left = middle + 1;
            }else{
                return middle;
            }
        }
        return -1;//  -1 特殊结果,就代表没有找到数据,数组中不存在该数据
    }
}

 

 扩展java提供的:

 

2 正则表达式

2.1 概述、初体验

2.1.1 作用一 检验数据合法性

package com.runa;
// 需求:校验QQ号码是否正确,要求全部是数字,长度(6-20)之间,不能以0开头
public class TestRegex1 {
    public static void main(String[] args) {
        System.out.println("------------------使用自己写的方法------------------------------");
        System.out.println(checkQQ(null));
        System.out.println(checkQQ("251425415"));
        System.out.println(checkQQ("05555dff555"));
        System.out.println(checkQQ("55555dff555"));
        System.out.println("----------------------使用正则表达式--------------------------");
        System.out.println(checkQQ1(null));
        System.out.println(checkQQ1("251425415"));
        System.out.println(checkQQ1("05555dff555"));
        System.out.println(checkQQ1("55555dff555"));
    }


    // 自己写的方法
    public static boolean checkQQ(String qq){
        // 1 判断qq号码是否为null
        if(qq == null || qq.startsWith("0") || qq.length() < 6 || qq.length() > 20){
            return false;
        }

        // 2 QQ 至少不是null,不是以0开头,满足6-20之间长度
        // 判断qq 号码中是否都是数字
        // qq = 25144s222
        for (int i = 0; i < qq.length(); i++) {
            // 根据索引提取当前位置处的字符
            char ch = qq.charAt(i);
            // 判断ch记住的字符,如果不是数字,qq号码不合法
            if (ch < '0' || ch > '9') {
                return false;
            }
        }
        // 3 说明qq号码合法
        return true;
    }

    public static boolean checkQQ1(String qq){
        return qq != null && qq.matches("[1-9]\\d{5,19}");
    }
}

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

见2.4

2.2 书写规范

 

 ​​​​​​​

 

  

 

2.3 应用案例

package com.runa;

import java.util.Scanner;

public class TestRegex2 {
    public static void main(String[] args) {
        checkPhone();
        checkEmail();
    }

    public static void checkPhone(){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请您输入您的电话号码(手机|座机):");
            String phone = sc.nextLine(); //接收一行数据
            //18625654598 010-26562544  010335588444
            if(phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})")){
                System.out.println("您输入的号码格式正确~~");
                break;
            }else {
                System.out.println("您输入的号码格式不正确~~");
            }
        }
    }

    public static void checkEmail(){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请您输入您的邮箱:");
            String phone = sc.nextLine(); //接收一行数据
            //43243242@qq.com
            if(phone.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")){
                System.out.println("您输入的邮箱格式正确~~");
                break;
            }else {
                System.out.println("您输入的邮箱格式不正确~~");
            }
        }
    }
}

 

2.4 用于查找信息

  

2.5 用于搜索替换、分隔内容

 ​​​​​​​

 

  

3 异常 (就是代表程序出现问题)

3.1 认识异常

 ​​​​​​​​​​​​​​​​​​​​​

3.1.1 运行时异常

 

 

3.1.2 编译时异常 

 ​​​​​​​

 

3.2 自定义异常

 

3.2.1 自定义运行异常

 

 

3.2.2 自定义编译异常

 

  

3.3 异常的处理

 ​​​​​​​

  

 

 

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

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

相关文章

加量不加价,比亚迪驱逐舰05焕发新生,冠军加新120km豪华版来袭

根据最新消息&#xff0c;比亚迪驱逐舰05冠军版推出了一款崭新的豪华车型&#xff0c;其预售价为11.98万元。该车具备出色的续航性能&#xff0c;最高续航里程可达1200公里&#xff0c;并且支持17千瓦直流快速充电、VTOL移动电站以及NFC全场景数字钥匙。 此外&#xff0c;该车…

黑马机器学习day2

1.1sklearn转换器和估计器 转换器和预估器&#xff08;estimator&#xff09; 1.1.1转换器 实例化一个转换器类 Transformer调用fit_transform() 转换器调用有以下几种形式&#xff1a; fit_transformfittransform 1.1.2估计器 在sklearn中&#xff0c;估计器是一…

Henon映射分叉图

Henon映射的方程为: 分叉图是观察最终值范围的一个重要方式。 下面我们通过matlab实现henon映射的分叉图。 clearvars clc close all a = 0:0.001:1.4; b = 0.3; N1 = 5000; N2 = 100; x = ones(N1+N2,length(a)); y = ones(N1+N2,length(a)); for j = 1:N1+N2-1x(j+1,:) …

pycharm、idea、golang等JetBrains其他IDE修改行分隔符(换行符)、在Git CRLF、LF 换行符转换

文章目录 pycharm、idea、golang系列修改行分隔符我应该选择什么换行符JetBrains IDE&#xff0c;默认行分隔符 是跟随系统修改JetBrains IDE&#xff0c;默认行分隔符 在Git CRLF、LF 换行符转换需求Git 配置选项 pycharm、idea、golang系列修改行分隔符 一般来说,不同的开发…

Endnote 具体期刊格式检索和下载方法——以nature期刊参考文献格式检索和下载为例

Endnote 具体期刊格式检索和下载方法——以nature期刊参考文献格式检索和下载为例 在外文文章写作时候&#xff0c;有时为了提高写作效率&#xff0c;会用到Endnote文献引用功能。然而&#xff0c;有时可能没有现成的参考文献格式&#xff0c;此时&#xff0c;比较快捷的方式&…

[保研/考研机试] KY30 进制转换-大整数转二进制 清华大学复试上机题 C++实现

描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述&#xff1a; 多组数据&#xff0c;每行为一个长度不超过30位的十进制非负整数。 &#xff08;注意是10进制数字的个数可能有30个&#xff0c;而非30bits的整数&#xff09; 输出描述&#xff…

top解析

突然发现redis不能存进去数据了&#xff0c;导致线上的验证码前端获取不到&#xff0c;然后想着重启一下redis,结果就是报错no space left on device df -h或者df - i : 查看磁盘空间&#xff0c;文件大小 du -sh*: 查看所有子目录大小 linux 中如何查看磁盘剩余空间的总大小 d…

IT运维:SIEM在鸿鹄中的应用

引言 SIEM &#xff08; Security, Information, and Event Management&#xff09;安全信息和事件管理&#xff0c;它是一种安全解决方案&#xff0c;可提供对事件的实时监控和分析&#xff0c;以及出于合规性或审计目的跟踪和记录安全数据。 SIEM 大多数提供核心的功能&#…

Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent

1 介绍 拖放事件主要用于处理MIME数据&#xff0c;该数据是用于在发送电子邮件时&#xff0c;附加多媒体数据&#xff08;即拖拽一个文件放入邮件中&#xff0c;事件文件的上传&#xff09;。 2 示例 a&#xff09;使用简化步骤声明拖放事件成员函数&#xff1a; b&#xff09;…

AIDL踩坑记录

1、aidl文件编译不出java文件&#xff1a; 有两种解决方案&#xff1a; 1、利用as新建一个AIDL&#xff0c;aidl文件会在aidl目录的包名下面&#xff0c;as会自己识别 2、如果代码是编写在自己的目录中&#xff0c;可用sourceSets指定aidl目录 sourceSets {main {aidl.srcDi…

Sentieon | 应用教程: 关于读段组的建议

介绍 本文档描述了使用Sentieon Genomics软件时&#xff0c;推荐使用RGID字段以最小化潜在问题的用法。 本文档能帮助您确定设置所使用的bam文件中RG标签的不同字段的最佳实践方法。 RG字段及其用法的详细描述 RG字段的详细描述 SAM格式规范http://samtools.github.io/hts-…

同步辐射全散射PDF测试的原理及应用领域盘点

同步辐射全散射PDF测试的原理及应用领域盘点 同步辐射全散射PDF是一种强大的材料结构表征技术&#xff0c;它通过同步辐射X射线衍射技术&#xff0c;探测材料中原子间的相对位置与偏移&#xff0c;从而揭示材料的微观结构和性质。 同步辐射全散射PDF原理 同步辐射全散射PDF测试…

MAPPO 算法的深度解析与应用和实现

【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明&#xff1a; 来源&#xff1a;36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章&#xff0c;质量有保障&…

4个方面介绍云渲染技术的发展趋势和前景!

云渲染技术是一种新兴的渲染技术&#xff0c;它利用云计算的优势&#xff0c;将渲染任务分配到云端服务器上进行处理&#xff0c;从而大大提高了渲染效率和质量。云渲染技术在影视动画、建筑设计、游戏开发等领域有广泛的应用&#xff0c;为数字内容创作提供了便捷和高效的解决…

金融科技与现代开源技术结合的进展超前到你无法想象!

想要了解最新的金融科技进展吗&#xff1f; 渴望与其他技术爱好者交流&#xff0c;并扩展您在金融科技行业中的人脉关系吗&#xff1f; 那么请参加我们即将举行的 Meetup&#xff0c;本次活动由 Apache DolphinScheduler 社区和 OceanBase 技术社区共同举办&#xff0c;聚焦金…

为什么都劝年轻人不要频繁跳槽?

"为什么都劝年轻人不要频繁跳槽&#xff1f;"这句话绝对正确&#xff0c;没有任何漏洞&#xff0c;无论如何解释都是正确的&#xff0c;因为“频繁”这个词是非常主观的&#xff0c;有很大的弹性。 不同的人对于跳多少次才算频繁有不同的看法&#xff0c;有人认为一…

二、MySql库的操作

文章目录 一、库的操作&#xff08;一&#xff09;创建数据库&#xff08;二&#xff09;创建数据库案例&#xff08;三&#xff09;字符集和校验规则1、 查看系统默认字符集以及校验规则2、查看数据库支持的字符集3、查看数据库支持的字符集校验规则4、校验规则对数据库的影响…

转转短链平台设计与实现

1 背景介绍 转转是中国领先的二手交易平台&#xff0c;链接作为用户在平台上进行交互和信息传递的重要媒介&#xff0c;扮演着不可或缺的角色。 传统长链接通常包含大量字符和特殊符号&#xff0c;不易记忆和传播。由于字数的原因&#xff0c;长链接在发送短信&#xff0c;生成…

策略模式【Strategy Pattern】

刘备要到江东娶老婆了&#xff0c;走之前诸葛亮给赵云&#xff08;伴郎&#xff09;三个锦囊妙计&#xff0c;说是按天机拆开解决棘手问题&#xff0c; 嘿&#xff0c;还别说&#xff0c;真是解决了大问题&#xff0c;搞到最后是周瑜陪了夫人又折兵呀&#xff0c;那咱们先看看…

Linux 的基本使用

1、Linux 是什么 Linux 是一个操作系统. 和 Windows 是 "并列" 的关系 Linux 严格意义来说只是一个 "操作系统内核". 一个完整的操作系统 操作系统内核 配套的应用程序. CentOS 和 RedHat 的关系 RedHat一直都提供源代码的发行方式&#xff0c;Cent…