1.5 网络协议
网络架构 : B/S C/S
B/S : Browser/Server 基于浏览器的服务器应用,比如网页版淘宝
C/S : Client/Server 基于客户端的服务器应用,比如安装的淘宝APP
TCP : 能重传,不丢包,如果丢失的话,会记录下来,重新发送,但是不会重复发送 可靠, 有序 ;
保证顺序不会乱,比如发送123,2丢失了会重传,接收到的就成了132,但是 你看到的一定是123 面向连接 : 如果连接不上,数据不会发送,简称三次握手
类似于打电话,如果打不通,消息是传递不过去的
UDP : 速度快,不保证可靠,可能丢包,无连接,相当于发短信
2 正则表达式
2.1 概述
正则表达式 定义了字符串的模式,可以用来搜索,编辑,处理文本,并不仅限于某一种语言
但是在每种语言中也会有细微的差别
jdk1.4推出正则表达式, 保存在java.util.regex包下
2.2 语法
正则表达式常用语法 :
\ : 转移符,把有意义字符转换为无意义字符
^ : 表示开始,以xxx打头
$ : 表示结束
一般想要强制全词匹配的时候,才加^和$
(.) : 任意字符组成
\\1 获取前面组中的数据
(\\d)\\1 : 表示两个连续出现的数字, 比如 11,22,33,44
(\\d)(a)\\1 : 表示 第一个和第三个是相同的数字,且数字中间有个a ,1a1,9a9
(\\d)(a)\\2 : 表示 第一个是数字,第二个和第三个都是a,1aa,3aa
范围相关
[abc] : 可能是a,可能是b,也可能是c
[a-z] : 可以匹配到小写字母
[A-Za-z] : 可以匹配到大小写字母
[A-Za-z0-9] : 大小写字母和数字
[0-9] : 匹配数字
[^0-9] : 匹配不是数字
简洁表示方式
. : 匹配任意字符,如果想匹配 . 需要转义 \.
\d : 表示数字 等价于 [0-9]
\D : 并表示非数字 [^0-9]
\s : 表示由空字符组成
\S : 表示非空
\w : 表示字母,数字,下划线 [0-9a-zA-Z_]
\W : 表示非字母数字下划线
数量相关 :
? : 表示出现0次或1次
+ : 表示出现1次或多次,大于等于1
* : 大于等于0
{n} : 表示出现n次 , [0-9]{6} : 表示出现6位数字
{n,} : 表示出现n次或n次以上 , 就是大于等于n , \d{6,} : 表示出现至少6个数字
{n,m} : 表示出现n到m次 , \d{6,9} : 表示出现6到9个数字
| : 或 , x|y 表示出现x或者是y
() : 子表达式,看做一个整体
2.3 java中的正则表达式
java中有三个正则表达式相关的类
PatternSyntaxException : 正则表达式异常类
Pattern : 正则表达式类
Matcher : 支持较强大的正则表达式匹配操作
实际操作中,有时候简单的校验操作,可以直接使用String的
验证 : boolean matches(String regex)
拆分 : String[] split(String regex)
替换 : String replacaAll(String regex,String str)
java.util.regex包
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误
2.3.1 Pattern
用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建
可以通过Pattern.complie(String regex)创建一个正则表达式·
只能做一些简单的匹配操作
2.3.2 Matcher
构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例 Matcher m = p.matcher("aaaaab");
支持便捷强大的正则匹配操作,包括分组、多次匹配支持
2.3.2.1 字符串匹配
Matcher.matches():对整个字符串进行匹配,只有整个字符串都匹配了才返回true
Matcher.lookingAt():对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
Matcher.find():对字符串进行匹配,匹配到的字符串可以在任何位置
2.3.2.2 数据提取
group : find和group一起使用,可以做到数据提取
group() 和 group(0) 都是提取匹配到的数据
group(1) 就是第一组数据(第一个小括号) , group(2) 就是第二组数据
System.out.println(matcher.group());
2.3.2.3 叠词去重
String regex = "(.)(\\1+)";
input = input.replaceAll(regex, "$1");