Java学习_13_常用API(二)


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao


一、正则表达式

以某种方式检验表达式是否符合要求,常用于检验注册用户名及密码是否合法。简而言之,就是一种规则。在这里插入图片描述
在这里插入图片描述
细节:[ ]包括的规则是指从左到右依次一个一个字符进行判断。每个中括号只对应一个字符。
在这里插入图片描述
细节:对于一个字符的并集可以使用中括号包含中括号
在这里插入图片描述

注意&符号的个数,单个就是符号,两个就是且(交集)
在这里插入图片描述
在这里插入图片描述

预定义的范围。但是由于这些符号要写到字符串里面,所以需要使用转义字符。
转义字符
\实际上是转义了两次。
在这里插入图片描述
但是以上都是只出现一次字符。如果需要多次指定类型需要使用如下规则:
在这里插入图片描述
其中X就是类似\d 或者\S 的符号。

练习:
在这里插入图片描述
代码如下:

String CphoneNumber = "1[3-9]\\d{9}";
String SphoneNumber = "[0-1]\\d{2,3}-?[1-9]\\d{4,9}";
String MailAdress = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";

在这里插入图片描述
(?i)指忽略后续字母的大小写,同样遵守括号规则(分组规则),如xxxx((?i)xxxxx)xxx,只忽略中间几个字母的大小写。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看得懂会改就行,一般不会自己写。

爬虫

在一段文本中爬取指定的数据
在这里插入图片描述

// Pattern:表示正则表达式类
// Matcher:文本匹配器,用指定的pattern来爬取匹配的文本,从头开始读(大字符串中获取子字符串)

在这里插入图片描述
在这里插入图片描述
读取网络数据,需要先创建网络连接对象,然后使用连接对象获取网页上的数据流,再将数据流转换成字符串。最后丢给写好pattern的matcher来进行匹配。
在这里插入图片描述

在这里插入图片描述
?表示占位符,指前面的字符整体。

(?=8|11|17)表示后面只做判断,不纳入正则获取。
(8|11|17) 表示后面不仅要做判断,也要加上去(纳入获取)
(?:8|11|17)和上面一个意思。
(?!8|11|17)表示只要前面,后面只做判断并且不纳入获取。

贪婪爬取与非贪婪爬取

例如正则“ab”
对字符串“abbbbbbbbbbba”
贪婪爬取:尽可能多获取数据,使用“ab+”,获取“abbbbbbbbbbb”
非贪婪:尽可能少获取数据,使用“ab+?”,获取“ab”
在这里插入图片描述
分组就是小括号,在括号内是组内小正则,组间是前后正则链接的关系
在这里插入图片描述
从左到右数左括号,每一个左括号就是一个索引,表示第几个组。
使用\组号表示把第X组的数据再拿出来用一次。
这个方法在一些算法题找字串非常有用,我记得那时一个excel的单元问题。

单字符的开头和结尾:
在这里插入图片描述
普通子串的开头和结尾:
G

重复子串(不知道重复次数)的开始和结尾:
在这里插入图片描述

当出现前后两个字符串都需要使用到分组内容的时候,就需要使用$符号。
在这里插入图片描述
在这里插入图片描述
注意:非捕获分组不会占用组号,特点是里面有?,问号表示括号外前面的所有内容,并且提示这是一个非捕获分组。
在这里插入图片描述

二、时间

java中的时间类会有独特的运算方法
在这里插入图片描述
在这里插入图片描述

Date

用Date来描述时间,精确到毫秒。
空参构造时,默认当前计算机时间,有参构造时,使用指定的时间值
在这里插入图片描述
在这里插入图片描述

注意,修改毫秒值指的是在指定时间(默认为1970年1月1日)开始增加的毫秒值。
在这里插入图片描述
时间类自带的计算比我们用数学方法来自定义运算快多了。
而且可以直接比较大小(先后):
在这里插入图片描述
在这里插入图片描述

SimpleDateFormat

主要用来把时间格式转换成我们习惯看的字符格式,或者把字符串转换成时间格式。
SimpleDateFormat本质是一种格式化的规则对象,某种程度上可以看成一中字符串。
在这里插入图片描述
在这里插入图片描述
其中格式作为字符串pattern也有特殊的书写方式如下:

在这里插入图片描述

在这里插入图片描述
其中年作为y字符出现4次,表示年以四位数来表示,填充到字符串的yyyy的位置,其他同理。
其中如果后续添加字符:EE,则会输出周X,表示星期,其字符为中文,是因为当前虚拟机的运行环境是中文环境,如果需要英文表示可以手动设置为英文环境,代码如下:

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE", Locale.ENGLISH);

也可以通过手动输入日期和pattern规则,将字符串日期转换成date对象,以使用时间计算相关的方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Calendar

在这里插入图片描述
因为Date对象每次更改都只能更改毫秒值,比较也是毫秒值间的大小比较,所以不太方便。
在这里插入图片描述
Calendar类不能直接创建对象,不能直接new。只能通过getInstance获取当前时间的日历对象。也就是通过一个静态方法获得子类对象,因为底层需要通过环境变量获取当前的系统环境。可以通过先获取当前的日期,再setTime来指定时间。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
细节:Calendar看起来就像一个数组一样,存储了各种信息,不同的索引展示的数据如下:
在这里插入图片描述

Calendar
例如:设定为2023年9月10日
在这里插入图片描述

注意,月份的范围是0~11,星期则是从周日(日返回1)开始。所以可以手写一个表用于检查。
x
在这里插入图片描述

JDK8新增时间类

在这里插入图片描述
在这里插入图片描述
JDK7中三个类在JDK8中被细分成了更多的类。

ZoneId时区

在这里插入图片描述
也是类似数组,但是无法直接通过索引来获取。
在这里插入图片描述
通过获取了时区类,可以和一些其他的时间类组合获取对应的时区的时间。

Instant时间戳

时间戳对象就是一个固定格式的字符串,类似SimpleDateFormate
在这里插入图片描述
ofxxxx指的是增加XXX时间后的时间点。
在这里插入图片描述
默认时间是标准时间,如果需要获取对应时区的时间要在后面加上时区对象。
在这里插入图片描述

ZoneDateTime带时区时间

在这里插入图片描述
在这里插入图片描述
需要注意的是of的参数。
JDK8的时间对象都是不可变的,所以修改时间的方法都是新建了一个新时间对象。

DateTimeFormatter 时间格式化类

类似SimpleDateFormat,将时间类型通过格式化来展示。
在这里插入图片描述

LocalDate LocalTime LocalDateTime日历类

在这里插入图片描述

在这里插入图片描述

Duration Period ChronoUnit工具类

工具类,通常用于时间长度间隔的计算。
在这里插入图片描述
例如:
在这里插入图片描述

三、包装类

就是基本数据类型的引用数据类型,例如常用的int类为基本数据类型,包装类就是Integer。
创造一个对象,把数据封装起来。
个人理解其实就是某种指针啦。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以直接通过字符串来获取数值,但是这已经是过时的方法了。
在这里插入图片描述
在java中每次new都一定创造出新的对象,所以地址值一定不一样。
但是静态方法中,已经预置一些对象(-128~127),可以直接拿去用,就跟之前math类一样。

在这里插入图片描述

需要注意以前的模块中,需要将包装类的值使用静态方法拿出来再计算,之后就不用了。
JDK5以后提供了自动装箱和自动拆箱的机制。
自动装箱:把基本数据类型自动变成其对应的包装类 。
自动拆箱:把包装类自动变成其对象对应的基本数据类型。

在这里插入图片描述

至此可以直接进行包装类的计算并且赋予int类。

在这里插入图片描述
注意返回值是String类,因为int和long的最长整数可能装不下,也表示不了字母。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fb7a75020e964ffa856b577c4710ba71.png)
可以直接将字符串转换成整数,但字符串中不可以出现字母,只能出现数字。
八种包中类中,除了Character之外都有parseXXX的方法,进行字符串到对应类型转换  
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e597612550dd484593fed4e307a7a8e1.png)

注意以后都用nextline,可以一次接受一整行的string。

总结

正则方法再数据检验的时候非常有用,以前写网页前端的时候不知道正则方法,总是自己手写逻辑,还要自己思考可能会出现的错误,学习正则以后一句话就能检验所有错误。
时间类的加减是很多应用类算法题最头疼的事情,什么闰年闰秒之前都是要手写逻辑来考虑,加加减减日月年真的痛苦,在学习了时间类以后这些事情都可以让虚拟机来一键完成。
还有包装类对象,以前接受字符串都是转换成char[]然后手写逻辑转换成数字挨个计算。现在可以直接转换成对应的类型。这个技巧在算法题中经常被使用,不过这样耗时也会蹭蹭上去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值