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

news/2024/11/18 0:37:50/

目录

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 =   3int 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 往左边找, 截止位置(右边位置) = 中间位置 - 1right = middle - 1;}else if(data > arr[middle]){// 往右边找,起始位置(左边位置) = 中间位置 +  1left = 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号码是否为nullif(qq == null || qq.startsWith("0") || qq.length() < 6 || qq.length() > 20){return false;}// 2 QQ 至少不是null,不是以0开头,满足6-20之间长度// 判断qq 号码中是否都是数字// qq = 25144s222for (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  010335588444if(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.comif(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.ppmy.cn/news/1018038.html

相关文章

MySQL使用C/C++访问

目录 前言 1.引入第三方库 2.MySQL接口介绍 总结 前言 哈喽&#xff0c;各位小伙伴&#xff0c;大家好&#xff01;今天我们要讲的是关于如何使用C/C语言访问数据库&#xff0c;实现对数据库内容的增删查改。 1.引入第三方库 访问数据库&#xff0c;MySQL提供了对应的第三方…

C语言的动态分配空间C++的动态分配空间问题

动态分配空间 C&#xff1a;1、malloc 2、calloc C&#xff1a;new运算符 一 malloc malloc()&#xff1a; 这个函数用于分配一块指定大小的内存块&#xff0c;并返回一个指向该内存块的指针。语法如下&#xff1a; void* malloc(size_t size); 示例&#xff1a; int* ptr …

UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)D题题解

文章目录 [Count Bracket Sequences](https://atcoder.jp/contests/abc312/tasks/abc312_d)问题建模问题分析1.分析合法括号字符串的特点2.从集合角度分析字符串每个字符的作用代码 Count Bracket Sequences 问题建模 给定一个字符串&#xff0c;字符串内仅有3种字符&#xff…

湘大oj1138爱你一生一世题解:最大公约数 逆向思维 int整除会向下取整

一、链接 爱你一生一世 二、题目 题目描述 在2013年1月4日&#xff0c;这个“爱你一生一世”的特别日子&#xff0c;男生都想向自己的喜欢的女生表达爱意。 你准备在该死的C语言考试后&#xff0c;去向她&#xff08;或者他&#xff1f;&#xff09;告白。告白怎么能缺了礼…

8.7黄金最新行情走势分析及多空交易策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周一&#xff08;8月7日&#xff09;亚洲时段&#xff0c;现货黄金震荡下跌&#xff0c;目前交投于1938美元/盎司&#xff0c;上周五金价探底回升&#xff0c;因美国…

echarts甘特图 一个值多条线

先看图 这里我们用到的是 series &#xff1a;type:custom 自定义&#xff0c;但是这里我遇到一个问题&#xff0c;就是不过你在series里push多少数据&#xff0c;图表上显示的都是在同一水平线&#xff0c;用了好多方法都不好使&#xff0c; renderItem: (params, api) >…

【多线程系列-05】深入理解ThreadLocal的底层原理和基本使用

多线程系列整体栏目 内容链接地址【一】深入理解进程、线程和CPU之间的关系https://blog.csdn.net/zhenghuishengq/article/details/131714191【二】java创建线程的方式到底有几种&#xff1f;(详解)https://blog.csdn.net/zhenghuishengq/article/details/127968166【三】深入…

网络适配器和MAC地址

点对点信道&#xff1a;由于目的地只有一个选项&#xff0c;所以数据链路层不需要使用地址。 而在广播信道中&#xff1a; 各个主机如何判断信号是不是发给自己的&#xff1f; 当多个主机连接在同一个广播信道上&#xff0c;要想实现两个主机之间的通信&#xff0c;则每个主机都…