【自用】JavaSE--算法、正则表达式、异常

算法

之前学408都有学过,温故而知新吧=.=

冒泡排序

两两交换比大小,每轮确定一个最值

java 复制代码
public static void MaoPaosort(int[] a){
    for(int i=0;i<a.length-1;i++){
        for(int j=0;j<a.length-1-i;j++){
            if(a[j]>a[j+1]){
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}

简单选择排序

每轮选择一个位置,将该位置上的数与后面待排序的所有数中最小的交换

java 复制代码
public static void SelectSort(int[] a){
    for(int i=0;i<a.length-1;i++){
        int minIndex = i; //记录最小值下标
        for(int j=i+1;j<a.length;j++){
            if(a[minIndex]>a[j]){
                minIndex = j;
            }
        }
        //当minIndex改变时,进行交换
        if (i!=minIndex) {
            int temp = a[i];
            a[i] = a[minIndex];
            a[minIndex] = temp;
        }
    }
}

折半查找

要求:查找对象必须有序

将找的数据与最中间的数进行比较,如果小就舍弃最中间右边的数,去找另一半,以此类推

java提供的方法:Arrays.binarySearch(数组 , 查找的数)

java 复制代码
public static int ZhebanSearch(int[] a, int x){
    int low = 0, high = a.length-1;
    while(low<=high){
        int mid = (low+high)/2;
        if(x>a[mid]){
            low = mid + 1;
        }else if(x<a[mid]){
            high = mid - 1;
        }else{
            return mid;
        }
    }
    return -1;
}

总之,查找与排序还有很多算法,等到时候刷题再复习408笔记

正则表达式

优势

++案例需求++:QQ号判定 --> 不以0开头、满足6-20的长度、全为数字

不使用正则表达式,使用正常的方法判断QQ号是否合法,方法如下:

使用正则表达式:

太爽了!

书写规则

注意:为什么 \d 要写出 \\d ---> 因为单个 \ 是转义字符,比如 \n \t 都有对应的作用,因此想要书写 \d 必须使用 \ 修饰 \ ,java才能得知输入的是 \ 而是不是转义字符, 才能正确输入\\d

因此,如果需要 . 就要数如输入 \\. 否则java会理解为任意字符

案例1:检验数据是否合法

输入的电话、邮箱、时间是否正确

电话:

邮箱:

时间:

案例2:爬取信息

爬取信息:在一段文本中查找满足要求的内容

整体流程:

  1. 定义爬取规则 --> 写正则表达式
  2. 把正则表达式封装成Pattern对象,以便后续的匹配器调用
  3. 通过Pattern对象得到匹配器
  4. 通过匹配器查找信息

案例3:搜索替换、分割内容

示例:

  • :出现一次或多次

1、替换

2、替换扩展

理解:

3、分割字符串

异常

异常就是程序出现的问题

异常的体系

如果报的是编译时异常,不对其进行处理,程序是无法继续运行下去的

自定义异常

自定义运行时异常

定义一个异常类继承RuntimeException,重写构造器,其中generate的构造器先选前两个,后面的之后学

自定义编译时异常

写法几乎一样,就是extend Exception,如下图,上为运行时异常,下为编译时异常

由于使用的是编译时异常,因此写出来就会报错,如下左图,需要对方法内部报错部分 ++alt+回车++ 抛出异常,将异常抛给上层,即main函数,此时就能实现编译时异常了,如下右图

<====>

补充

throw:用在方法内部,抛出异常对象

throws:用在方法上,将异常抛给上层调用者

两个异常方法都可行,如果觉得问题比较严重,需要马上提醒编程时的程序员,就使用++编译时异常++ ;否则就使用++运行时异常++

异常处理方式

代码层面异常处理方式

抛出异常(throws)

在出现异常的地方按 alt+回车,如下图,选择 Add... 就可以将异常将异常抛出了,不会在管这个地方,可以正常运行

选择add...后,会在main后面多出一个 throws XXX

捕获异常(try...catch)

选中要捕获异常的代码段,按住 ctrl+alt+t,现在try...catch,如下图,就可以捕获异常

这样就能抓住异常信息并打印出来

实际开发中异常处理方式

底层的都往外送,最外层捕获处理

1、捕获异常,记录异常并响应合适的信息给用户

另一种写法:不具体某种异常,而是直接抛出异常,可以直接得知有异常,但不知道异常具体在哪,对比如下图

2、捕获异常,尝试修复

案例:输入合适价格时,若输出入的是字符串,则会直接报错,程序就崩了

此时就可以采用捕获异常的方法解决该问题,如下图,此时若是输入了字符串,则会被catch,然后执行catch中的代码段,这样程序就不会崩了

注意:上图中打印的一片红色的报错是代码 e.printStackTrace(); 的执行结果,而下图catch中没有 e.printStackTrace(); ,因此也不会出现一片红

相关推荐
胚芽鞘6814 小时前
关于java项目中maven的理解
java·数据库·maven
岁忧5 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
Hellyc6 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
今天又在摸鱼6 小时前
Maven
java·maven
老马啸西风6 小时前
maven 发布到中央仓库常用脚本-02
java·maven
代码的余温6 小时前
MyBatis集成Logback日志全攻略
java·tomcat·mybatis·logback
一只叫煤球的猫8 小时前
【🤣离谱整活】我写了一篇程序员掉进 Java 异世界的短篇小说
java·后端·程序员
斐波娜娜8 小时前
Maven详解
java·开发语言·maven
Bug退退退1238 小时前
RabbitMQ 高级特性之事务
java·分布式·spring·rabbitmq