Java基础day09

一、正则表达式:

1、定义

使用一些具有特殊含义的元字符,编写字符串的匹配规则

Regex ---- Pattern

案例

Pattern p = Pattern.compile("a*b");//基于传入的正则构建正则表达式对象
Matcher m = p.matcher("aaaaab");//调用匹配器,匹配传入的字符串
boolean b = m.matches();//判断是否匹配成功

2、常用元字符

元字符意义
.匹配除换行符以外的任意字符
*匹配前一个字符出现0次或多次
+匹配前一个字符出现至少一次
{n}匹配前一个字符出现n次
{n,m}匹配前一个字符出现>=n且<=m次
{n, }匹配前一个字符出现至少n次
^匹配开始位置,eg:匹配以abc开始:^abc
$匹配结束的位置,eg:匹配以jpeg结束:jpeg¥
[]匹配其中的任意字符,eg:f[oa]t: fat fot
[-]如果连字符“-”在选择匹配中出现,可以表示区间范围 [a-zA-Z],[0-9]
[^]排除选择匹配中出现的所有字符,f[ ^ao]t:ft
()分组捕获,出现在括号的内容会被添加到一个数组中,并且从1开始编号,被分组后的内容可以根据编号进行反向引用, \\1(从捕获的数组中提取下标为1的单元)
|表示或者 "ab|cd",匹配只能是ab或者cd
\d匹配0-9任意一个数
\s匹配特殊的控制符,空格 ,制表符,换行符
\w与[a-zA-Z]相同

3、方法说明

group(int [i]) //从捕获的分组中提取指定下标的单元,但是在调用之前一定要先确认是否匹配成功。即现调用matches()为true时在提取

如果group参数为0表示提取数组中第一个元素也就是完全匹配的所有内容

爬虫案例:

     
       //爬虫
        String content = "<a href=\"https://www.baidu.com?abc=354sdfsdf\">百度</a>";
        //从a标签上提取url地址 - 正则
        Pattern pattern = Pattern.compile("<a href=\"(.*)\">百度</a>");
        Matcher matcher = pattern.matcher(content);
        //System.out.println(matcher.matches());
    if(matcher.matches()){
        //提取url
        String group = matcher.group(1);
        System.out.println(group);
    }

练习: 1、匹配手机号是否符合规范 2、匹配邮箱地址是否符合规范

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
​
public class Demo3exercise {
    public static void main(String[] args) {
        //1.匹配手机号是否符合规范
        //2.匹配邮箱地址是否规范
        Scanner scanner = new Scanner(System.in);
        while (true){
        System.out.println("选择判断:1,手机判断    2.邮箱判断");
​
            System.out.println("输入选则:");
            int i = scanner.nextInt();
            switch (i) {
                case 1:
​
                    System.out.println("请输入手机号");
                    String next = scanner.next();
                    System.out.println(phone(next));
                    break;
                case 2:
​
                    System.out.println("请输入邮箱");
                    String next2 = scanner.next();
                    System.out.println(emile(next2));
                    break;
                default:
                    System.out.println("输入有误");
            }
​
        }
    }
    //手机号
    public static boolean phone(String number){
        Pattern pattern = Pattern.compile("1([3-5]|[7-9])\\d{9}");
        Matcher matcher = pattern.matcher(number);
        boolean falg = matcher.matches();
        return falg;
    }
    //邮箱
    public static boolean emile(String text){
        Pattern pattern = Pattern.compile("((\\d{6,11})|(\\w{4,8})|(\\w{4}\\d{4,7}))@((\\w{2,7}.){1,2}|(163.)|(\\w{4}.))(com)|(net)");
        Matcher matcher = pattern.matcher(text);
        boolean falg = matcher.matches();
        return falg;
    }
}

二、数学相关类

1、 Math

方法意义
addExact(5,19====》24加法运算
subtractExact(25,9)====》16减法运算
multiplyExact(2,5)====》10乘法运算
floorDiv(3,2)====》1除法运算
abs(-9)====》9绝对值
pow(2,3)====》8次幂
max(8,9)====》9最大值
min(2,7)====》2最小值
random(10)====》0-9之间的随机数
ceil(2.5)====》3向上取整
floor(2.5)====》2向下取整

注意:对于浮点数而言,在计算机底层做换算时会被转为无限循环的小数:

1.3--1.333333333;所以在处理精度要求更高的场景推荐使用下面的类:

2、BigDecimal

在BigDecimal中,数值会被作为字符串进行处理。

//将数值封装为BigDecimal对象

BigDecimal   num1= new BigDecimal("数字");
BigDecimal   num2= new BigDecimal("数字");

常用方法:

方法意义
num1.add(num2)加法
num1.subtract(num2)减法
num1.multiply(num2)乘法
num1.divide(num2)除法
num1.abs(num2)绝对值
num1.pow(num2)次幂
num1.max(num2)最大
num1.min(num2)最小

案例:

BigDecimal   num1= new BigDecimal("数字");
BigDecimal   num2= new BigDecimal("数字");
​
BigDecimal divide = n1.divide(n2);
System.out.println(divide.doubleValue());

三、包装类

针对java里的基本数据类型(基本类型变量上没属性和方法)。而java称为纯面向对象语言,因而对基本类型做了相应的包装类型。

基础类型包装类型
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

注意:自jdk1.5开始,java支持基础类型赋值给包装类型,反之亦然

包装类型 = 基础类型 //封箱

基础类型 = 包装类型 //开箱

封箱的过程实际上调用了包装类身上的valueOf()方法实现

Integer valueOf(int i);

拆箱的过程实际上调用了包装类身上的*Value()方法实现

四、日期类、

在方法身上添加了@Deprecated注解从,官方即将在以后的版本不在使用,准备废弃

jdk1.8之前:

Date //表示日期类

-getTime() //返回从1970-1-1 0:0:0到当前的时间毫秒值

Calender //日历

-- getInstance() //返回当前日期的Calender对象

--set //设置时间

SimpleDateFormat //日期格式化

---SimpleDateFormat("yyyy-MM-dd HH-mm-ss");

--format(Date date)//将日期对象根据格式转化为对应的字符串

jdk1.8开始:

LocalDataTime 日期时间

LocalData 日期

LocalTime 时间

---now() //返回当前日期的LocalDateTime对象

---of(....) //将指定的日期时间转换为LocalDateTime对象

LocalDateTime now = LocalDateTime.now();
String format = now.format(DateTimeFormatter,ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(format);

五、异常类

1、定义

异常是java中用于问题反馈的机制。(ERROR 错误, Exception异常)

ERROR:不应该尝试捕获,是程序正常运行过程中出现的不可避免的严重问题

Exception:异常对于程序员来说是可控的。 ​

错误和异常都是直接继承java.lang.Throwable

2、异常处理方式:

1.在方法上可以抛出异常

throws 异常类型

2.捕获异常

try{

//可能会存在异常的代码

}catch(异常类型 变量){

//异常处理

}catch(异常类型 变量){

//异常处理

}. . . . . . . .

finally{

//无论是否有异常产生都会被调用

}

3、异常的分类

编译时异常:在编译阶段抛出的异常,这种异常是必须要解决的。----使用上面的异常处理方法

运行时异常:

在运行的时候有可能会出现的异常,这种异常可以处理也可以不处理。

如果该异常是RuntimeExpection的子类就属于运行时异常;

4、如何通过抛异常进行问题反馈

可以通过throw 配合异常实现

在方法中:

throw new 异常类(“”);

注意:如果是抛出编译时异常,则需要在方法参数列表后使用throws抛出,如果是运行时异常,可以不用在方法上抛。

5、异常捕获处理办法

a、如果捕获的每个异常都有自己的处理办法,就需要分别捕获

b、如果所有异常处理都相同,则可以直接找这些异常的共同父类

c、如果多个异常需要分组处理,那么同一组的异常之间可以用 | 隔开,-----jdk1.7 (不能出现有直接继承关系的异常类)

6、自定义异常

类去继承Expexction,相当于写了一个编译时异常类。

类继承RuntimeExpection----相当于自定义一个运行时异常

练习:

1、输入一个字符串和一个数字,数字表示字节个数,然后按照指定的字节个数来截取这个字符串,要求不准出现半个字符的现象
import java.util.Scanner;
​
/**输入一个字符串和一个数字,数字表示字节个数,然后按照指定的字节个数来截取这个字符串,
 要求不准出现半个字符的现象*/
public class exercise1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入字符串");
            String str = scanner.next();
            System.out.println("请输入截取的位数");
            int num = scanner.nextInt();
            ffi(str, num);
        }
    }
    public static void ffi(String str,int num){
        char[] chars = str.toCharArray();
        int index=chars.length/ num;
        for (int i = 0; i <index  ; i++) {
                 String s = new String(chars, num * i, num);
                 System.out.println(s);
             }if (chars.length%num!=0){
                String x = new String(chars, num * index,chars.length-num *index);
                System.out.println(x);
            }
        }
    }
​
2、输入一个字符串,提取这个字符串中的数字并求和 -> sdf85dfghd72s6 -> 8 5 7 2 6 -> 28
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
​
/*2、输入一个字符串,提取这个字符串中的数字并求和 -> */
public class exercise2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入字符串");
            String str = scanner.next();
            System.out.println(ff2(str));
        }
    }
​
        public static int ff2(String  str){
            Pattern pattern= Pattern.compile("\\d");//设置一位数子
            Matcher matcher = pattern.matcher(str);
            int sum=0;
            while (matcher.find()){//每次找到一位数
                String group = matcher.group();
                int i = Integer.parseInt(group);
                sum+=i;
            }
​
            return sum;  }
}
3、输入一个字符串,提取这个字符串中的数字并排序->sdf85dfghd72s6 -> 8 5 7 2 6 -> 2 5 6 7 8
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
​
/*输入一个字符串,提取这个字符串中的数字并排序->sdf85dfghd72s6 -> 8 5 7 2 6 -> 2 5 6 7 8*/
public class exercise3 {
    public static void main(String[] args) {
​
    Scanner scanner = new Scanner(System.in);
        while (true) {
        System.out.println("请输入字符串");
        String str = scanner.next();
            System.out.println(Arrays.toString(ff3(str)));
​
        }
}
​
    public static int[] ff3(String  str){
        Pattern pattern= Pattern.compile("\\d");//设置一位数子
        Matcher matcher = pattern.matcher(str);
​
        //先获取找到的数字的个数确定数组的长度
        int num=0;
        while (matcher.find()){//每次找到一位数
            num++;}
​
        //找完了,要重置Matcher对象,不然数据就是为0
        matcher.reset();
​
        int[] arr=new int[num];//将找到的个数设置为字符数组的长度
        int index=0;//填入元素
        while (matcher.find()){//每次找到一位数
            String group = matcher.group();
            int i = Integer.parseInt(group);
            arr[index]=i;
            index++;
        }
​
      Arrays.sort(arr);
       return arr;}
}
4、输入一个字符串,利用charAt方法判断这个字符串是否是一个回文字符串
import java.util.Scanner;

/*4、输入一个字符串,利用charAt方法判断这个字符串是否是一个回文字符串*/
public class exercise4 {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入字符串");
            String str = scanner.next();
            System.out.println(ff4(str));
        }
    }
    public static boolean ff4(String str){
            char[] chars = str.toCharArray();
        for (int i = 0  ,j=chars.length-1;  i <chars.length&&j>0 ;i++,j--) {
            if (chars[i]!=chars[j]){
                return false;
        }
        } return true;
    }
}
5、输入一个字符串,统计每个字符出现的个数---hsoafngifaoa -> h:1 s:1 o:2 a:3 f:2 n:1 g:2 i:1
/*5、输入一个字符串,统计每个字符出现的个数---hsoafngifaoa -> h:1 s:1 o:2 a:3 f:2 n:1 g:2 i:1*/
public class exercise5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入字符串");
            String str = scanner.next();
                   ff5(str);
        }
    }
​
    public static void ff5(String str) {
        //定义一个新的字符串遍历原本的字符串,在新的如果没有出现就添加
        String s ="";
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            //判断是否出现在新的字符串
            int num = s.indexOf(c, 0);
            if (num==-1){
                //没有出现过就加进去
                s+=c;
            }
        }
        //将s字符串变成字符数组
        char[]  ss = s.toCharArray();
        char[] chars = str.toCharArray();
        for (int i = 0; i < ss.length; i++) {
            int num=0;
            for (int j = 0; j <chars.length ; j++) {
                if (chars[i]==chars[j]){
                       num++;
                }
            }
            System.out.println(chars[i]+":"+num);
        }
    }
}

SQL Prompt是Red Gate Software公司开发的一款强大的SQL代码编辑和优化工具,主要面向数据库开发者和管理员。版本11.0.1.16766是一个更新版本,它提供了更高效、更便捷的SQL编写环境,旨在提升SQL代码的可读性、效率和一致性。这个安装包包含了所有必要的组件,用于在用户的计算机上安装SQL Prompt工具。 SQL Prompt的核心功能包括自动完成、智能提示、格式化和重构。自动完成功能能够帮助用户快速输入SQL语句,减少键入错误;智能提示则基于上下文提供可能的选项,加快编写速度;格式化功能允许用户按照自定义或预设的编码规范对SQL代码进行美化,提升代码的可读性;而重构工具则可以帮助用户优化代码结构,消除潜在问题。 在描述中提到的“代码格式化规则来源于网络”,指的是用户可以通过下载网络上的json文件来扩展或定制SQL Prompt的代码格式化规则。这些json文件包含了特定的格式设置,如缩进风格、空格使用、注释位置等。将这些文件复制到指定的目录(例如:C:\Users\用户名\AppData\Local\Red Gate\SQL Prompt 10\Styles)后,SQL Prompt会读取这些规则并应用到代码格式化过程中,使得用户可以根据个人偏好或团队规范调整代码样式。 以下几点请注意: 1. 经实测,此版本支持最新的Sql Server 2022版的SSMS21 2. 此安装包中不包括keygen,请自行解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值