【自用】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(); ,因此也不会出现一片红

相关推荐
Lyyaoo.2 小时前
【JAVA基础面经】JVM的内存模型
java·开发语言·jvm
杨凯凡2 小时前
【017】泛型与通配符:API 设计里怎么用省心
java·开发语言
IT利刃出鞘2 小时前
Spring工具类--ObjectUtils的使用
java·后端·spring
MY_TEUCK8 小时前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程
java·人工智能·学习·aigc
我爱cope9 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
朝新_9 小时前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH23121110 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts10 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
aq553560012 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
我是无敌小恐龙12 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习