Da网络编程、正则表达式
1 网络通信
通信双方地址
a)IP
b)端口号
c)OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广
d)TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。
1.1 OSI七层
应用层,表示层,会话层,传输层,数据链路层,物理层,网络层
应用层 : 在网络中向用户提供服务窗口,主要用来支持用户的需求
电子邮件,文件传输等
主要协议 : http(80),DNS,FTP(21)
表示层 : 为通信提供一种公共的语言,方便交互,因为计算机系统结构不同,数据表示方式也就不同
其他功能 可以做数据加密,数据压缩等
传输层 : 两台计算机经过网络进行数据通信
协议有 TCP/UDP
数据链路层 : 可以理解为数据通道
MAC地址表示唯一性
网络层 : 以IP报文的形式进行传递,并且在网络层IP地址表示唯一性
1.2 网络协议
1.2.1 TCP/IP
1.2.1.1 概述
传输层协议中有两个非常重要的协议:
传输控制协议TCP(Transmission Control Protocol)
用户数据报协议UDP(User Datagram Protocol)。
TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。
IP(Internet Protocol)协议是网络层的主要协议,支持网间互连的数据通信。
TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即物理链路层、IP层、传输层和应用层。
1.2.1.3 服务端
// 创建对象,支持TCP协议.并开启端口号
ServerSocket ss = new ServerSocket(10000);
System.out.println(“服务器已经启动,等待客户端连接…”);
// 执行该方法的时候,线程就停下来了,等待客户端连接
// 只要有客户端连接,就会返回socket对象,里面封装的是客户端的信息
Socket skt = ss.accept();
System.out.println(“客户端已连接”);
// 获取客户端信息
// 获取客户端对应的输入流
InputStream is = skt.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,“UTF-8”));
// 给客户端发送数据
// 获取客户端对应的输出流
OutputStream os = skt.getOutputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os,“UTF-8”));
// 接收用户输入
Scanner scanner = new Scanner(System.in);
String msg = null;
boolean flag = true;
while (flag) {
// 读取数据
String line = br.readLine();
System.out.println("客户端发来消息 : " + line);
msg = scanner.nextLine();
if (msg.equals(“exit”)) {
flag=false;
}
// 给客户端发送数据
pw.println(msg);
pw.flush();
}
// 关闭资源
br.close();
pw.close();
skt.close();
ss.close();
System.out.println(“已断开连接”);
1.2.1.4 客户端
// 客户端对象,指定服务端IP和端口Socket skt = new Socket("127.0.0.1", 10000);// 获取客户端信息// 获取客户端对应的输入流InputStream is = skt.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));// 给服务端发送数据// 获取服务端对应的输出流OutputStream os = skt.getOutputStream();PrintWriter pw = new PrintWriter(new OutputStreamWriter(os,"UTF-8"));// 接收用户输入Scanner scanner = new Scanner(System.in);String msg = null;boolean flag = true;while (flag) {// 给服务端发送数据pw.println(msg);pw.flush();msg = scanner.nextLine();if (msg.equals("exit")) {flag = false;}// 读取数据String line = br.readLine();System.out.println("服务端发来消息 : " + line);}// 关闭资源br.close();pw.close();skt.close();
1.2.2 UDP/IP
UDP网络通信
流 程:
1.DatagramSocket与DatagramPacket
2.建立发送端,接收端
3.建立数据包
4.调用Socket的发送、接收方法
5.关闭Socket
发送端与接收端是两个独立的运行程序
1.2.2.1 服务端
1.2.2.2 客户端
2. 正则表达式
2.2 Java中的正则表达式
java.util.regex包
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误
2.3.1 Pattern
用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建
可以通过Pattern.complie(String regex)创建一个正则表达式
只能做一些简单的匹配操作
使用:
Pattern.split(CharSequence input) ,成员方法, 用于分隔字符串
import java.util.regex.*;
public class TestRegex
{
public static void main(String[] args)
{
String input=“001_天亮_教育_石家庄”;
Pattern pattern=Pattern.compile("_");
String[] strArray=pattern.split(input);
for(String ele:strArray){
System.out.println(ele);
}
}
}
Pattern.matches (String regex,CharSequence input),静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串。
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():对字符串进行匹配,匹配到的字符串可以在任何位置
// 1 matches : 全词匹配
public static void test1() {
String input = “13113113111”;
String regex = “\d{11}”;
// 创建正则表达式引擎对象
Pattern pattern = Pattern.compile(regex);
// 创建匹配器
Matcher matcher = pattern.matcher(input);
// 匹配
boolean result = matcher.matches();
System.out.println(result);
}
// 2 lookingAt : 从前往后匹配,前面符合条件就行
public static void test2() {String input = "13113113111asd";String regex = "\\d{11}";// 创建正则表达式引擎对象Pattern pattern = Pattern.compile(regex);// 创建匹配器Matcher matcher = pattern.matcher(input);// 匹配boolean result = matcher.lookingAt();System.out.println(result);
}// 3 find : 任意位置符合条件都可以
public static void test3() {String input = "asd13113113111asd";String regex = "\\d{11}";// 创建正则表达式引擎对象Pattern pattern = Pattern.compile(regex);// 创建匹配器Matcher matcher = pattern.matcher(input);// 匹配boolean result = matcher.find();System.out.println(result);
}
2.3.2.2 数据提取
// 4 group : find和group一起使用,可以做到数据提取
public static void test4() {
String input = “张小三的电话号码是13113113111s@##李四的电话号码是13113113112王五的电话号码是13113113113”;
// [\u4E00-\u9FFF] 汉字范围
String regex = “([\u4E00-\u9FFF]{2,3})的电话号码是(\d{11})”;
// 创建正则表达式引擎对象Pattern pattern = Pattern.compile(regex);// 创建匹配器Matcher matcher = pattern.matcher(input);// 匹配while (matcher.find()) {// group() 和 group(0) 都是提取匹配到的数据// 1 就是第一组数据(第一个小括号) , 2 就是第二组数据// System.out.println(matcher.group());// System.out.println(matcher.group(0));System.out.println(matcher.group(1)+" : "+matcher.group(2));}
}
2.3.2.3 叠词去重
// 还原成 : 我要学编程
String input = “我我…我我…我要…要要…要要…学学学…学学…编编编…编程…程.程程…程…程”;
// 1 把.去掉
input = input.replaceAll("[^\u4E00-\u9FFF]", “”);
// 我我我我我要要要要要学学学学学编编编编程程程程程程
System.out.println(input);
// (.) : 任意字符组成// \\1 获取前面组中的数据// (\\d)\\1 : 表示两个连续出现的数字, 比如 11,22,33,44// (\\d)(a)\\1 : 表示 第一个和第三个是相同的数字,且数字中间有个a ,1a1,9a9// (\\d)(a)\\2 : 表示 第一个是数字,第二个和第三个都是a,1aa,3aaString regex = "(.)(\\1+)";// 创建正则表达式引擎对象Pattern pattern = Pattern.compile(regex);// 创建匹配器Matcher matcher = pattern.matcher(input);// find查找// while (matcher.find()) {// // 使用 group(1)把group(0) 替换即可// input = input.replaceAll(matcher.group(), matcher.group(1));// }// $1 就是 group(1) 而 regex 就等于是group();input = input.replaceAll(regex, "$1");System.out.println(input);
Da网络编程、正则表达式相关推荐
- Days 24 网络编程 正则表达式
1. 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接 ...
- 网络编程 正则表达式
Day24-网络编程&正则表达式 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序. Java提 ...
- 2022.02.09_Java学习总结_网络编程、正则表达式
1. 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接, ...
- 网络编程、正则表达式
1.网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接, ...
- JAVA网络编程、正则表达式
今天是来到天亮的第25天,今天学习了网络编程.正则表达式. 网络编程: Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序. Ja ...
- Java系列课程第二十二天(网络编程、正则表达式)
Day22 -网络编程.正则表达式 1.网络编程概述 ava是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库, ...
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观 CLI(Conmand line User Interface)( ...
- Python文件的读写、正则表达式的运用、多线程与多进程、网络编程
文章目录 文件的读写 读文件 写文件 写二进制文件 读写``JSON``文件 正则表达式 常用的元字符 字符转义 重复 字符类 分支条件 分组 反义 反向引用 多重继承 多线程 守护线程 线程保护 多 ...
- 黑马程序员——网络编程及正则表达式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型: OSI参考模型.TCP/IP参考模型 1.找对方IP 2.数据发到对法指定 ...
最新文章
- NginxApachePHP参数汇总
- ASP.NET MVC 控制器激活(一)
- 解决IntelliJ无法导入maven包的问题
- AD账号创建日期、最近一次登录时间、最近一次重置密码时间查询
- 2-3:套接字(Socket)编程之UDP通信,sockaddr,sockaddr_in,recvfrom,sendto
- 移动端line-height与height相同文字不居中
- 如何使用计算机远程关闭手机软件,手机怎么控制电脑 手机远程控制电脑关机方法 (全文)...
- 双语不用教 下载地址!!!
- slideDown和slideUp初始状态设置,使用animate替代
- Openstack配置hyperv作为虚拟化服务器
- Matlab自带的分类学习工具箱(SVM、决策树、Knn等分类器)
- 烽火十八台丨从3.15曝光的食品安全问题看供应链网络安全防护
- 阿里研究院花几年心得终成趣谈网络协议,附技术官讲解
- 区块链时代的大数据生态
- 数据库第一范式、第二范式、第三范式、BCNF范式
- 经典游戏中的游戏编程
- 太卷了,年薪40W的软件测试大D佬工作经验分享,原来我存在这么多问题......
- 2022年危险化学品生产单位安全生产管理人员考试及危险化学品生产单位安全生产管理人员新版试题
- 如何实现FHSS模型和CST模型之间的相互导入导出!
- php将数组转换为JSON中文字符串(兼容中文)