目录
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的算法(排序算法、查找算法)、正则表达式
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));
}
}
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));
}
}
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提供的:
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.4
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(); //接收一行数据
//[email protected]
if(phone.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")){
System.out.println("您输入的邮箱格式正确~~");
break;
}else {
System.out.println("您输入的邮箱格式不正确~~");
}
}
}
}