【韩顺平 零基础30天学会Java】(第三阶段)(自用)

目录

一、坐标和绘图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面坦克大战自己做就行了。

二、 线程基础

1. 基本介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以使用jconsole的命令查看线程运行情况
在这里插入图片描述

2. 线程使用(继承Thread)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样的话只输出一次就退出线程了,为什么?
在这里插入图片描述
因为start方法会自动调用run方法,而run方法里面你只让他输出一次了。
Q:那怎么改? A:加while让它一直循环吧在这里插入图片描述
在这里插入图片描述

3. 多线程机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
而且从这里可以看出很重要的一个点:我的main线程结束了,我的Thread-0线程可以继续运行,当我的Thread-0线程也结束了,我的程序就是这个进程才结束。

4. 为什么用start()不用run()?

用run()方法就相当于在main中调用了一个方法一样,执行完run方法再往下执行main的语句,此时run方法还是属于main线程的。而如果用start才是创建了一个自己的线程,它跟main线程是交替执行的。
在这里插入图片描述
在这里插入图片描述

5. 线程使用(实现Runnable)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么可以直接将dog对象传入Thread构造器中new出来一个对象实现多线程呢?
这里底层使用的是一种设计模式——代理模式。下面模拟底层机制:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 多线程售票问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
无论用Thread还是Runnable,都会出现超卖问题,需要解决。看后面的同步内容。

7. 线程终止

在这里插入图片描述
在这里插入图片描述

8. 线程常用方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
yield让不出的原因不是当前线程不想让别人插队,是底层CPU觉得我自己现在能力资源充足,没必要大家让来让去,一起运行也可以。
在这里插入图片描述

9. 守护线程

在这里插入图片描述
如果MyDaemonThread不是守护线程的话:
在这里插入图片描述
在这里插入图片描述
这样就算主线程结束了,子线程仍然一直运行。那么怎么改呢,让MyDaemonThread成为一个守护线程,这样当所有用户线程结束,守护线程就会自动结束。仅仅改动如下即可:
在这里插入图片描述
也可以这样通俗的理解,守护线程就是你的监护人,等你长大了之后就不再守护你了呀哈哈哈哈哈~

10. 线程的生命周期

在这里插入图片描述
在这里插入图片描述

11. 线程同步

在这里插入图片描述
在这里插入图片描述
之前的售票超卖问题解决:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就实现了不再超卖,可是如果像下面一样的话就会出现多个售票窗口卖出同一张票的情况,为什么呢?
在这里插入图片描述
在这里插入图片描述
此时你new了三个实现了Runnable的ticketWindow2类的对象,并将它们放入 三个Thread线程中,当Thread运行的时候,它会动态绑定到每个对象的run方法中去运行,这时候你提供的三个对象的run方法并不是同一个,当thread1调用run的时候,它只能跟同样调用这个run方法的那些线程synchronized同步,跟thread2的run方法没有关系,也就同步不了,这样不就自然出现多线程同时卖出一张票的可能咯。所以要解决就很简单啊,如下图,一个对象三个线程:
在这里插入图片描述
记住这句:同步方法(非静态的)的锁是加在当前对象的,同步方法(静态的)的锁是加在当前类的。
回到该题,这里synchronized除了可以加在方法上也可以加在某段代码块上,这种实现实际上锁也是加载this对象中的。
在这里插入图片描述
这样就不是了,下面这样就是加在整个类中了,因为用了static啊:
在这里插入图片描述
this是针对对象的,static是针对类的。
这里这样就会报错,因为你在static方法下去控制某个对象的同步,那肯定更不可以了。静态变量优先于对象存在的,类被加载到内存中时,被static修饰的变量也会随着类的加载而加载到内存中,所以不能用this做锁,因为是this针对的是对象。static比对象先执行,这个时候this里边没有东西。
在这里插入图片描述
改成这样就不会报错了:
在这里插入图片描述
总结:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提问练习?一下代码可以锁住吗?
在这里插入图片描述
答:那必然不行,两个new出来的对象不是同一个,this指向的对象是每个当前对象,就比如两个人在争夺锁,但是他们争夺的都不是同1把锁,那有什么好争的,各用各的呗,起不到锁住的作用。
再比如,这里我synchronized(object),object类某个对象独有的,满足多线程共享同一个对象的要求。
在这里插入图片描述
在这里插入图片描述
但是如果我改成
在这里插入图片描述
这样每个线程去拿这个对象锁的时候都是拿到不同Object对象的,不能实现锁定的,不满足要求的第三点——多个线程的锁对象为同一个。
在这里插入图片描述

12. 线程死锁

在这里插入图片描述

13. 释放锁

在这里插入图片描述
在这里插入图片描述

三、 IO流

1. 文件基本介绍

在这里插入图片描述
在这里插入图片描述

2. 常见的文件操作

1)创建文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:这里new File不是真的新建了一个文件出来,只是说你在内存中新建了File这样的对象,这个对象并没有跟硬盘产生联系,只有当你使用createNewFile的时候,才是真正的在硬盘中新建了一个文件。
而且,这里的路径写的是\,本来的路径应该是"D:\Project",但是转义字符\应该写成\。
在这里插入图片描述
在这里插入图片描述

2)获取文件的相关信息

在这里插入图片描述
在这里插入图片描述
注:UTF-8编码时1个汉字3个字节,1个英文1个字节。

3)目录操作和文件删除

在这里插入图片描述
在这里插入图片描述
还要体会到,在java中,目录也被看作文件。
在这里插入图片描述
在这里插入图片描述
注意:mkdirs和mkdir方法的区别

  • mkdirs方法 会递归调用父目录的mkdirs方法去逐级创建各级父目录;
  • mkdirs方法中调用mkdir方法去创建当前目录;
  • mkdir方法只能创建当前目录,也就是上级各个目录均存在的情况下才会创建成功,否则创建失败而mkdirs可以逐级创建各级目录。

3. IO流

1)原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)FileInputStream

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是注意,用这样的方法读中文字符会出现乱码,因为UTF-8用的是三个自己字节表示一个中文字,如果你用char提取出来其中一个字节,提出来的就不会是这个中文字。而且这样单个字节的读取,效率比较低。
使用read(byte[]b)读取文件,提高效率。如下:
在这里插入图片描述

3)FileOutputStream

在这里插入图片描述
在这里插入图片描述
三种写入方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)字符流

在这里插入图片描述
在这里插入图片描述

5)FileReader

在这里插入图片描述
单个字符读取文件:
在这里插入图片描述
字符数组读取文件:
在这里插入图片描述

6)FileWriter

在这里插入图片描述
在这里插入图片描述

7)节点流和处理流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8)BufferedReader

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拷贝:
在这里插入图片描述
在这里插入图片描述

9)Buffer字节流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10)字节处理流拷贝

在这里插入图片描述
注意:字节流能操作二进制文件也能操作文本文件,但是字符流只能操作文本文件。字节流是根本!

11)对象处理流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12)ObjectOutputStream


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13)ObjectInputStream

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Dog类弄成public的,公有,保证输入和输出用的是同一个类。
在这里插入图片描述

14)标准输入输出流

在这里插入图片描述
在这里插入图片描述

15)转换流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

16)InputStreamReader

在这里插入图片描述
在这里插入图片描述

17)OutputStreamWriter

在这里插入图片描述
在这里插入图片描述
GBK应该是属于ANSI之中的,在ANSI的国际通用集,GBK是专门来解决中文编码的,是双字节的,不论中英文都是双字节,而UTF-8是才用的另外的一种编码方式,对英文是用8位,对中文使用24位,是和ANSI和GBK 的编码方式是有本质区别的。我们记事本默认的保存时方式是ANSI,并且用不同的编码方式编写的文件必须用对应的编码格式来读取,否则就会出现乱码。
所以上面可以用gbk打开ANSI文件,然后以gbk格式保存在txt属性中显示也是ANSI。

18)PrintStream字节打印流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

19)PrintWriter字符打印流

在这里插入图片描述
在这里插入图片描述

20)Properties

在这里插入图片描述
传统的方法:
:
使用Properties类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还要注意,properties.get得到的是Object对象,要转换才能用。
在这里插入图片描述

四、 网络编程

1. 入门(一些术语和基本知识)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. InetAddress

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. Socket

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. TCP字节流编程

1)应用案例1

在这里插入图片描述
在这里插入图片描述
服务器端:
在这里插入图片描述
在这里插入图片描述
客户端:
在这里插入图片描述

2)应用案例2

在这里插入图片描述
在前面的基础上修改,注意加入结束标记,不然就一直等,不知道什么时候输出结束,出现问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. TCP字符流编程

在这里插入图片描述
在这里插入图片描述
修改一下流的处理就行了
在这里插入图片描述
在这里插入图片描述

6. 网络上传文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
反正自己慢慢写,也不一定需要用到别人给出的工具类StreamUtils,可以自己写出来的。

7. netstat

在这里插入图片描述
netstat -anb可以顺带看到是哪个应用程序在使用端口。

8. TCP连接秘密(客户端被分配随机端口)

在这里插入图片描述

9. UDP网络编程应用案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1)应用案例1

在这里插入图片描述
在这里插入图片描述
receiver:
在这里插入图片描述
在这里插入图片描述
Sender:
在这里插入图片描述
udp就不需要我们自己写结束标记,底层帮我们搞定了。

10. 练习

1)第一题

在这里插入图片描述
改一下之前的就行了
在这里插入图片描述

在这里插入图片描述

2)第二题(TCP文件下载)

client:
在这里插入图片描述
在这里插入图片描述
server:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意,这里有一个问题:
在这里插入图片描述
如果你再写的话会报错:
在这里插入图片描述
原因是socket.shutdownOutput();即关闭客户端的输出流,它相当于给流中加入一个结束标记-1。你这里上面已经关闭过输出流了啊,而且,现在你的bos跟文件有关,跟socket有啥关系啊?🤣所以你再关不就报错咯~
如果你需要再发的话,由于TCP是无边界标记的连接,如果要接受再发来回多次的话,可以自己约定一个内容,作为让客户端主动停止连接的标识符。

还有:若是发送的东西很是多必需要用循环读,能够有如下解决方案:

  • 调用socket的 shutdownOutput 方法(Java)关闭输出流,该方法的文档说明为,将此套接字的输出流置于“流的末尾”,这样另外一端的输入流上的read操做就会返回-1。
  • 约定结束标志,当读到该结束标志时退出再也不read。 (Http 的 Transfer-Encoding: Chunked 首部,表示将以一个 length 为 0 的 chunk 作结束标志)
  • 设置超时(timeout),会在设置的超时时间到达后抛出SocketTimeoutException异常而再也不阻塞。
  • 双方定义好通讯协议,在协议头部约定好数据的长度。当读取到的长度等于这个长度时就再也不继续调用read方法。(Http 的 content-length 首部,会给出主体的长度)

而若是须要发送多个相互独立的内容,内容之间就须要有明确的分界,方法有:

  • 像 multipart-form 同样,使用 boundary 字串作分割,使用 Content-Type 等首部作内容标识。
  • 用二进制帧作分割,在帧首部定义好帧的长度和其余信息。

五、 通信系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码自己看D:\Project\QQ里面的内容
在这里插入图片描述
实现无异常退出分析:
原因:main线程退出的时候子线程还没退出的。
ia
在这里插入图片描述
在这里插入图片描述
私聊思路分析:
在这里插入图片描述
文件发送思路分析:
在这里插入图片描述
文件这里要注意,不要直接byte[]转String,然后将这个String放到content直接传过去,会有损坏,打不开了。
在这里插入图片描述
可以像这样将整个byte[]传过去。
字节数组转换为字符串会造成数据损失的一些解释

推送新闻的思路:
在这里插入图片描述
离线留言功能出现的小问题,我有写对应的解答哦。
java.io.StreamCorruptedException: invalid stream header

六、 反射机制

1. 引入问题

在这里插入图片描述
在这里插入图片描述
这样是做不到的,现有的方法无法实现要求。

2. 快速入门

在这里插入图片描述
在这里插入图片描述

3. 原理


在这里插入图片描述

4. 反射相关类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 反射调用优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. Class类

1)分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)常用方法

在这里插入图片描述

在这里插入图片描述

3)获取Class类对象的六大方式

四种核心方法在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)哪些类型有Class对象

在这里插入图片描述
在这里插入图片描述

7. 类加载

1)动态和静态加载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)类加载流程图

在这里插入图片描述
在这里插入图片描述

3)类加载的五个阶段

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加锁机制:
在这里插入图片描述
在这里插入图片描述

按顺序初始化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
new对象的时候才会执行构造器,现在没有new所以不会执行哦。将这里多加一句new

注意:
在这里插入图片描述

4)获取类结构信息

a)第一组方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

b)第二组方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

c)第三组方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

d)第四组方法

在这里插入图片描述
在这里插入图片描述

5)通过反射创建对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6)反射暴破操作属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7)反射暴破操作方法

在这里插入图片描述
反正暴破就是针对private成员使用setAccessible(true)访问。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7)练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、JDBC

1. jdbc原理

在这里插入图片描述

2. jdbc模拟实现

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 快速入门

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 数据库连接方式

1)方式1

在这里插入图片描述

2)方式2

反射的加载方式是动态加载,减少了依赖性,更加灵活。
在这里插入图片描述

3)方式3

不用必须创建properties对象,还可以用drivermanager进行统一管理。
在这里插入图片描述

4)方式4(推荐)

不用注册驱动,自动完成注册,简化代码
在这里插入图片描述
在这里插入图片描述
甚至反射也不用写,但是还是最好写上。
在这里插入图片描述
在这里插入图片描述

5)方式5(推荐)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5. ResultSet底层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. SQL注入

在这里插入图片描述
在这里插入图片描述
这样的话就无论如何都能登录,因为是OR语句,而‘1’=‘1’是永远成立的啊。
在这里插入图片描述

7. PreparedStatement

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. JDBCUtils开发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9. 事务

在这里插入图片描述
不使用事务可能出现的问题:在这里插入图片描述
解决方法——使用事务:
在这里插入图片描述
在这里插入图片描述

10. 批处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源码分析:
在这里插入图片描述

11. 数据库连接池

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看这个示意图,意思就是首先将连接池中的有限的连接都跟数据库连起来(网络打通),当java程序想要使用的时候先看看有没有连接是没人用的,如果有就直接拿来用,用完之后将连接放回连接池,此前此后该连接一直是连接数据库的;如果连接全都被占用了,就到等待队列中等待,等到有空的就拿来用。
在这里插入图片描述

12. C3P0连接池

1)方式1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)方式2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13. Druid连接池

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14. Apache-DBUtils

1)模型图

在这里插入图片描述

2)模拟封装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)Query

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)源码分析

跟自己写的封装逻辑上没啥区别
在这里插入图片描述

5)DML

查询单行记录的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15. BasicDao

1)引入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)应用实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完善示意图:
在这里插入图片描述
在这里插入图片描述

16. 满汉楼项目

1)需求分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)程序分层框架

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分析是从上到下分析,写代码的时候从下到上去写。

3)实现

代码看D:\Project\hspedu\jdbc\src\com\XXX\MHL
在这里插入图片描述
在这里插入图片描述

八、 正则

1. 快速入门

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 底层实现

在这里插入图片描述
不考虑分组:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
考虑分组:
分组就是当正则表达式有小括号的时候,第一个小括号的内容就是第一组,第二个小括号的内容就是第二组…
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 语法

在这里插入图片描述

1)转义

在这里插入图片描述
在这里插入图片描述
什么时候需要用到转义字符?
在这里插入图片描述

2)字符匹配符

在这里插入图片描述
在这里插入图片描述
?代表0或1个字符
+代表1个或多个字符
在这里插入图片描述
应用实例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)选择匹配符

在这里插入图片描述
在这里插入图片描述

4)限定符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)定位符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6)捕获分组

在这里插入图片描述
在这里插入图片描述

7)非捕获分组

在这里插入图片描述
在这里插入图片描述
非捕获分组是没有分组的,不要写group(1)之类的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8)非贪婪分配

在这里插入图片描述

4. 正则应用实例

在这里插入图片描述

  1. 汉字
    在这里插入图片描述
    注意这里,这两个开头结尾的定位符,定的位是你整个文本的开头和结尾!整个文本的开头和结尾!
    所以如果你写成这样是不满足格式的,中间多了a。
    在这里插入图片描述
  2. 邮政编码
    在这里插入图片描述
  3. QQ号码在这里插入图片描述
  4. 手机号码在这里插入图片描述

5. 验证复杂URL

正则表达式中各种括号区别:小括号就是括号内看成一个整体 ,中括号就是匹配括号内的其中一个,大括号就是匹配几次。
[\w-]就是说可以是数字、字母、下划线、或者-。
当?写在中括号里面,它表示的就是实在在的问号,而不是限定符。
同样的:
在这里插入图片描述
在这里插入图片描述

匹配的正则表达式如下:
在这里插入图片描述

6. Pattern类

在这里插入图片描述
在这里插入图片描述

7. Matcher类

在这里插入图片描述
不用find方法也可以自己提取到匹配字符串
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. 反向引用

在这里插入图片描述
在这里插入图片描述
也就是这个分组可以被再次引用,使用方式是\分组组号。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9. 结巴去重

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10. 替换分割

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意这里,matches方法是整体匹配的,没有需要你限定开头什么的操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照上面这样运行的话结果是:
在这里插入图片描述
而如果稍微修改一下,按照每个每个数字去分割,而不是按照一组数字去分割的话,结果如下:
在这里插入图片描述
区别(有空行)的原因如下,以后也可以这样画图分析:
在这里插入图片描述

11. 练习

1)练习1

在这里插入图片描述
在这里插入图片描述

2)练习2

在这里插入图片描述
在这里插入图片描述

3)练习3

在这里插入图片描述在这里插入图片描述

  • 9
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值