day_24 UDP、正则表达式


    1.5.2 UDP/IP
        1.5.2.1 概述
            DatagramSocket与DatagramPacket
            建立发送端,接收端
            建立数据包
            调用Socket的发送、接收方法
            关闭Socket
            注:发送端与接收端使两个独立的运行程序

        1.5.2.2 服务端
            //打开UDP对象,并监听某个端口,用于接收数据
            DatagramSocket ds = new DatagramSocket(10000);
            //创建字节数组,用于保存接收到的数据
            byte[] buf = new byte[1024];
            //声明一个包接收器
            DatagramPacket dp = new DatagramPacket(buf,buf.length);
            while(true){
                //通过开启的端口接收数据
                ds.receive(dp);
                ByteArrayInputStream bais = new ByteArrayInputStream(buf);
                DataInputStream dis = new DataInputStream(bais);
                System.out.println(dis.readUTF());
            }

        1.5.2.3 客户端
            //要发送的数据
            String string = "你asd123好sd";
            //创建字节数组输出流
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            //创建数据流
            DataOutputStream dos = new DataOutputStream(baos);
            //写出数据,把数据写到字节数组流中,同时保存了数据类型
            dos.writeUTF(string);
            //把数据转换为字节数组
            byte[] buf = baos.toByteArray();
            //数据传输
            //创建数据包,把数据进行打包,并绑定服务端地址和端口
            DatagramPacket dp = new DatagramPacket(buf,buf.length,new InetSocktAddress("127.0.0.1",10000));
            //传输需要本地开启端口把数据发送出去
            DatagramSocket ds = new DatagramSocket(9999);
            //发送数据包
            ds.send(dp);
            //关闭资源
            ds.close();
            System.out.println("发送完成");

2.正则表达式
    2.1 概述
        定义了字符串的模式,可以用来搜索,编辑,处理文本,并不仅限于某一种语言
        但每种语言都会有细微差别
        保存在java.util.regex包下
    
    2.2 常用语法
            \:转义符,把有意义的字符转换为无意义字符
        范围相关:
            [abc]:可能是a/b/c 
            [a-z]:可以匹配到小写字母
            [A-Za-z0-9]:可以匹配到大小写字母数字
            [^0-9]:匹配不是数字
        简洁表示方式:
            .:匹配任意字符,如果想匹配. 需要转义 \.
            \d:表示数字
            \D:表示非数字
            \s:第哦啊是由空字符组成
            \S:表示非空
            \w:表示字母数字下划线
            \W:表示非字母数字下划线
        数量相关:
            ?:表示出现0次或1次
            +:表示出现一次或多次
            *:大于等于0
            {n}:表示出现n次
            {n,}:表示出现n次或n次以上
            {n,m}:表示出现n到m次
            |:或,x|y表示出现x或是y
            ():子表达式,看作一个整体

    2.3 Java中的正则表达式
        Java.util.regex包
        PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误

        2.3.1 Pattern 
            用于创建一个正则表达式,也可以说创建一个匹配模式,私有的,不可以直接创建
            可以通过Pattern.complie(String regex)创建一个正则表达式
            只能做一些简单的匹配操作

            //匹配
                //内容
                String str = "23.465";
                //正则表达式
                String rege = "\\d+(\\.\\d+)?"
                //创建引擎对象
                Pattern pattern = Pattern.compile(regex);
                //匹配,并且是全词匹配
                boolean result = pattern.matches(regex,str);
                System.out.println(result);
            
            //拆分
                String string = "1.2.3.4.5";
                //创建正则表达式引擎对象
                Pattern pattern = Pattern.compile("\\.");
                //调用拆分方法
                String[] arr = pattern.split(string);
                for(String stirng2 : arr){
                    System.out.println(sting2);
                }
        
        2.3.2 Matcher
            //1.matches:全词匹配
            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:从前往后匹配,前面符合条件就行
            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:任意位置符合条件都可以
            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);

            //4.group:find和group一起使用,可以做到数据提取
            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 = "我我...我我...我要..要要...要要...学学学....学学...编编编..编程..程.程程...程...程";
            //把.去掉
            input = input.replaceAll("[^\u4E00-\u9FFF]","");
            // (.) : 任意字符组成
            // \\1 获取前面组中的数据
            // (\\d)\\1 : 表示两个连续出现的数字, 比如 11,22,33,44
            // (\\d)(a)\\1 : 表示 第一个和第三个是相同的数字,且数字中间有个a ,1a1,9a9
            // (\\d)(a)\\2 : 表示 第一个是数字,第二个和第三个都是a,1aa,3aa
            String regex = "(.)(\\1+)";
            //创建正则表达式引擎对象
            Pattern pattern = Pattern.compile(regex);
            //创建匹配器
            Matcher matcher = pattern.matcher(input);
            //find查找,$1就是group(1),regex就等于group();
            input = input.replaceAll(regex,"$1");
            System.out.println(input);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值