Day12(2020.06.25)

1、正则

正则表达式是用来描述具有一定特征的字符串的特殊字符串

1.1 正则的用处

验证、查找、替换、分割 。

1.2 工具 RegexBuddy的使用
1.3 字符集

​ 普通字符 精确匹配

​ 元字符 [] () \ ^ $ . * + ? |

​ 转义字符 \d \ \s \w 等

1.4 字符类

​ 1.4.1 自定义 []

​ 1) ^ 如果在第一个位置,表示取反的含义。

​ 2) -表示一个区间即范围、

​ 3) ] 最近一个位置为:结束,表示普通 [

​ 4) .自身.的含义。如果需要表示原有的含义 1.4.2 默认|标准字符类

​ 1) \d [0,9]

​ 2) \w [a-zA-Z0-9]

​ 3) \s 空格 tab 换行

​ 4) . 可以匹配任意字符

1.5 量词

​ 1) * 0个及以上

​ 2) + 1个及以上

​ 3) ? 0或1个

​ 4) {n} n次,非负数

​ 5) {n,} 大于等于n次

​ 6) {n,m} 大于等于n,小于等于m次

1.6 贪婪模式

​ 1) * {n,} +贪婪模式 (匹配字符越多越好,可回溯)

​ 2) ?懒惰模式 (匹配字符越少越好,可回溯)

​ 3) +独占模式 (匹配字符越多越好,不可回溯)

​ 4) 阻止贪婪有两种方式: 量词后面使用? 使用取反

1.7 边界

​ 1) 边界不占用宽度,只是一个界限

​ 2) ^ :开始 \b:单词边界 \B:非单词边界 $:结束

​ ^:多行代表每行头 单行代表整个字符串的开始

​ $: 多行代表每行尾 单行代表字符串的结尾

​ \b 匹配前面或后面的不是\w

​ \B 匹配前面或后面的是\w

1.8 选择符与分组

​ 1) 选择组:| 优先级低 ,满足匹配则停止,不会查找更优的方案

​ 2) 分组:() 反向引用\1 \2… 非捕获组(?:xxx)

1.9 模式修改符

​ 1) i:insensitive 使正则表达式对大小写不敏感;(重点)

​ 2) s:singleline 开启“单行模式”,即点号“.”匹配新行符;

​ 3) m: multiline 开启“多行模式”,即“^”和“$”匹配新行符的前面和后面的位置

​ 4) (?i)select(?-i) -> 不区分大小写。

1.10 零宽断言

​ 1) (?=exp) 先行断言

​ 2) (?<=exp) 后发断言

1.11 常用类

​ Pattern compile() 将给定的正则表达式编译到模式中

​ Matcher matcher() find() group() matches()

​ replaceAll() spilt()

public class Demo01Regx {
    public static void main(String[] args) {
       String str = "hku89q3429ureisdfj38we";
       //匹配三个数字
        Pattern p = Pattern.compile("\\d{2}");
        //在字符串中匹配
        Matcher m = p.matcher(str);
        //System.out.println(m.group());//获取找到的内容
        System.out.println(m.find());//true


        str = "djgrugi4jhwrh3rhk3rht8er";
        str = str.replaceAll("\\d","-");
        System.out.println(str);//djgrugi-jhwrh-rhk-rht-er

    }
}

2、计算机网络

2.1 网络分层
2.2 端口和URL

​ InetAddress

getLocalHost() getByName(计算机名|域名|ip地址)

getHostAddress() getHostName()

public static void main(String[] args) throws UnknownHostException {
    //获取本机的地址(计算机名+ip地址)
    InetAddress localHost = InetAddress.getLocalHost();
    System.out.println(localHost);//LAPTOP-QR5KADD9/192.168.11.195
    //获取其他计算机的地址      局域网中的计算机名,域名,ip地址
    InetAddress address = InetAddress.getByName("DESKTOP-V47VTGS");
    System.out.println(address);//DESKTOP-V47VTGS/192.168.11.168
    //获取外网中的电脑
    address = InetAddress.getByName("www.baidu.com");
    System.out.println(address);//www.baidu.com/180.101.49.11s

    //getHostAddress()  返回 ip 地址
    //getHostName()  返回域名|本机为计算机名
}
public static void main(String[] args) throws Exception {
    //百度搜索首页URL
    URL url = new URL("http://www.baidu.com");
    //输入流
    BufferedInputStream bis = null;
    //创建文件联系
    File file = new File("baidu.html");
    //输出流
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
    bis = new BufferedInputStream(url.openStream());
    int len;
    byte[] car = new byte[1024];
    while ((len = bis.read(car))!=-1){
        bos.write(car,0,len);
    }
    bos.flush();
    bis.close();
    bos.close();
}
2.3 传输层协议
1) TCP

​ TCP(transfer control protocol) 打电话 面向连接、安全、可靠,效率低

服务器端

​ ①创建服务器 指定端口

​ 创建服务器ServerSocket,在创建时定义ServerSocket的监听端口(在这个端口接收客户端发来的消息!)

​ ②等待客户端连接 ServerSocket调用accept()方法,使之处于阻塞状态

​ ③分析接收数据 利用Socket进行接收和发送数据

客户端

​ ①连接服务器: 创建客户端 +指定服务器地址 +端口

​ 创建客户机Socket,并设置服务器的ip及端口,客户机发出连接请求,建立连接。

​ ②发送数据

​ 通过Socket发送数据,和接收数据

public static void main(String[] args) throws Exception {
    //服务器端套接字
    ServerSocket socket = new ServerSocket(8888);
    //监听 等待客户端请求连接
    Socket client = socket.accept();

    //输入流
    BufferedInputStream bis = new BufferedInputStream(client.getInputStream());
    //输出流
    BufferedOutputStream bos = new BufferedOutputStream(client.getOutputStream());

    //接受数据的空间
    byte[] car = new byte[1024];
    //读取|接收数据
    int len = bis.read(car);
    System.out.println(new String(car, 0, len));//哈啊哈哈
    //发送数据
    bos.write("收到消息了".getBytes());
    bos.flush();
    //关闭
    bos.close();
    bis.close();
    socket.close();
}
public static void main(String[] args) throws Exception {
    //创立连接 目标主机地址 端口号
    Socket server = new Socket(InetAddress.getLocalHost(), 8888);

    BufferedOutputStream bos = new BufferedOutputStream(server.getOutputStream());
    BufferedInputStream bis = new BufferedInputStream(server.getInputStream());

    //发送消息
    bos.write("哈啊哈哈".getBytes());
    bos.flush();

    byte[] car = new byte[1024];
    int len = bis.read(car);
    System.out.println("从服务器端接收的消息:" + new String(car,0,len));
    //从服务器端接收的消息:收到消息了
    bis.close();
    bos.close();
    server.close();
}
2) UDP

UDP(UserDatagramProtocol ) 发送短信 非面向连接、不安全、数据可能丢失 、效率高

​ DatagramSocket:用于发送或接收数据包

​ DatagramPacket:数据容器(封包)

服务器端:

​ ①创建服务器 DatagramSocket类 +指定端口 (定义服务器端的监听端口)

​ ②准备接收容器 字节数组 +封装成DatagramPacket数据包 (准备容器接收数据)

​ ③接收数据

​ ④分析数据

​ ⑤释放资源

客户端:

​ ①创建客户端 DatagramSocket类 +指定端口 (定义客户端的监听端口)

​ ②准备数据 字节数组

​ ③封装成数据包 需要指定包发送的地址+端口 即服务器地与端口 (打包要发送的数据)

​ ④发送数据

​ ⑤释放资源

public static void main(String[] args) throws Exception {
    //接收数据包 制定自己的端口号为8888
    DatagramSocket socket = new DatagramSocket(8888);
    //接受数据的空间
    byte[] car = new byte[1024];
    //数据容器(封包) 接收的容器
    DatagramPacket packet = new DatagramPacket(car, car.length);
    //接收
    socket.receive(packet);
    //打印接收内容
    String str = new String(car, 0, packet.getLength());
    System.out.println(str);//哈哈哈哈哈
    socket.close();
}
public static void main(String[] args) throws Exception {
    //用于发送数据包 指定自己的端口
    DatagramSocket socket = new DatagramSocket(9999);
    //发送的数据
    byte[] data = "哈哈哈哈哈".getBytes();
    //数据包  里面存放了发送的数据  发送的地址 端口
    DatagramPacket packet = new DatagramPacket(data, 0, data.length, InetAddress.getLocalHost(), 8888);
    //发送
    socket.send(packet);
    System.out.println("已发送");
    socket.close();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值