栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

day27 Java 动态代理 正则表达式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

day27 Java 动态代理 正则表达式

文章目录
  • 一、动态代理(简)
  • 二、正则表达式
    • 原义字符
    • 元字符:字符类
    • 元字符:范围类
    • 元字符:预定义类
    • 边界字符
    • 量词类
    • 元字符:分组()
    • 元字符:反向引用
  • 三、校验手机号、邮箱号


I know, i know
地球另一端有你陪我




一、动态代理(简)
  代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象。
  举例:春季回家买票让人代买

  动态代理:在程序运行过程中产生的这个对象
    而程序运行过程中产生对象其实就是反射
    所以,动态代理其实就是通过反射来生成一个代理
//	Goods 接口,增删改查
public interface Goods {

    public abstract void add();
    public abstract void delete();
    public abstract void update();
    public abstract void select();
}
//	Goods 接口实现类
public class GoodsImp implements Goods {
    @Override
    public void add() {
        System.out.println("增加用户数据");
    }
    @Override
    public void delete() {
        System.out.println("删除用户数据");
    }
    @Override
    public void update() {
        System.out.println("更新用户数据");
    }
    @Override
    public void select() {
        System.out.println("查询用户数据");
    }
}
public class MyInvocation implements InvocationHandler {

    private Object proxy;

    public MyInvocation(Object obj){
        this.proxy = obj;
    }

    @Override
    public Object invoke(Object proxy, Method method
                        , Object[] args) throws Throwable {

        System.out.println("权限校验");
        //	反射调用方法
        Object result = method.invoke(this.proxy, args);
        System.out.println("日志记录");

        return result;
    }
}
// 主程序
public class DynamicAgent {

    public static void main(String[] args) {

        GoodsImp good = new GoodsImp();

        //动态代理
        //我们需要先创建一个动态代理对象
        //public static Object newProxyInstance(ClassLoader loader,
        //                                      类[] interfaces,
        //                                      InvocationHandler h)
        //throws IllegalArgumentException返回指定接口的代理类的实例,
        //该接口将方法调用分派给指定的调用处理程序
        Object o = Proxy.newProxyInstance(good.getClass().getClassLoader()
                                        , good.getClass().getInterfaces()
                                        , new MyInvocation(good));

        Goods g = (Goods) o;

        System.out.println(o.getClass());
        System.out.println(g.getClass());

        g.add();
        System.out.println("-----------------");
        g.delete();
        System.out.println("-----------------");
        g.select();
        System.out.println("-----------------");
        g.update();
    }
}

运行结果:

         class com.sun.proxy.$Proxy0
		 class com.sun.proxy.$Proxy0
         权限校验
         增加用户数据
         日志记录
         -----------------
         权限校验
         删除用户数据
         日志记录
         ...

二、正则表达式 原义字符
public class Regular2 {
    public static void main(String[] args) {

        String regex = "a";
        String s = "abajbgakjabsfgababccaaaa";
        System.out.println(s.replaceAll(regex,"_"));
    }
}

输出结果

	_b_jbg_kj_bsfg_b_bcc____
元字符:字符类
public class Regular3 {
    public static void main(String[] args) {
        //  定义规则
        //  只要字符串中出现了abc中的任意一个都会匹配到并替换
        //  []将字符进行归类,可以出现括号中的任意一个字符进行匹配
        String regex = "[abc]";
        //  反选
        String regex2 = "[^abc]";
        String s = "abajbgakjabsfgababccaaaa";
        System.out.println(s);
        System.out.println(s.replaceAll(regex,"_"));
        System.out.println(s.replaceAll(regex2,"_"));
    }
}

输出结果

	abajbgakjabsfgababccaaaa
	___j_g_kj__sfg__________
	aba_b_a__ab___ababccaaaa
元字符:范围类
public class Regular4 {

    public static void main(String[] args) {

        // a 到 z 小写
        String regex = "[a-z]";
        // a 到 z 大、小写
        String regex2 = "[A-z]";
        // a 到 z 小写 和 4
        String regex3 = "[a-z4]";

        String s = "ASisf3446ajskdZfg345aht";

        System.out.println(s);
        System.out.println(s.replaceAll(regex,"_"));
        System.out.println(s.replaceAll(regex2,"_"));
        System.out.println(s.replaceAll(regex3,"_"));
    }
}

输出结果

	ASisf3446ajskdZfg345aht
	AS___3446_____Z__345___
	_____3446________345___
	AS___3__6_____Z__3_5___
元字符:预定义类
public class Regular5 {

    public static void main(String[] args) {

        String regex = null;
        String s = "abc12323 124ad aqw&;1234.AB";

        regex = "\d";  //  数字
        System.out.println(s.replaceAll(regex,"_"));
        regex = "\D";  //  数字之外
        System.out.println(s.replaceAll(regex,"_"));

        regex = "\s";  //  空白字符  空格
        System.out.println(s.replaceAll(regex,"_"));
        regex = "\S";  //  除空白字符外
        System.out.println(s.replaceAll(regex,"_"));

        regex = "\w";  //  大小写字母及数字
        System.out.println(s.replaceAll(regex,"_"));
        regex = "\W";  //  大小写字母及数字
        System.out.println(s.replaceAll(regex,"_"));

        //如果仅仅是想要匹配.这个字符
        //需要用进行转义  "\."
        regex = ".";
        System.out.println(s.replaceAll(regex,"_"));
    }
}

输出结果

	abc12323 124ad aqw&;1234.AB
	abc_____ ___ad aqw&;____.AB
	___12323_124________1234___
	abc12323_124ad_aqw&;1234.AB
	________ _____ ____________
	________ _____ ___&;____.__
	abc12323_124ad_aqw__1234_AB
	___________________________
边界字符
public class Regular6 {

    public static void main(String[] args) {

        //这里没有中括号,^代表以什么开头
        String regex = "^abc";
        //定义要被匹配的字符串
        String s = "abc12323 124ad aqw&;1234.AB";
        System.out.println(s.replaceAll(regex,"_"));

        regex = "AB$"; //表示以AB结尾
        System.out.println(s.replaceAll(regex,"_"));

        //  字符,数字,连在一起时会公用下划线分开
        s = "Hello World666 1 2 3  &1;0 0 a b s f";
        s = "1&1";
        regex = "\b"; //匹配单词的两边
        System.out.println(s.replaceAll(regex,"_"));

        regex = "\B"; //匹配单词之间
        System.out.println(s.replaceAll(regex,"_"));
    }
}

输出结果

_12323 124ad aqw&;1234.AB
abc12323 124ad aqw&;1234._
_1_&_1_
1&1
量词类
public class Regular7 {

    public static void main(String[] args) {

        // 只看@出现的次数
        String regex = "abc@?";
        String s = "abcdfjabc@@1babc@";
        System.out.println(s.replaceAll(regex,"_"));

        //定义一个规则
        regex = "^a?"; //匹配以a开头,只匹配0次或者1次
        s = "aaaaaabcdefg";
        System.out.println(s.replaceAll(regex,"_"));

        regex = "^a+"; //匹配以a开头,匹配1次或者多次为一组,进行替换
        System.out.println(s.replaceAll(regex,"_"));

        regex = "^a*"; //匹配以a开头,匹配任意次为一组,进行替换
        System.out.println(s.replaceAll(regex,"_"));

        regex = "^a{3}"; //匹配以a开头,匹配3个为一组,进行替换
        System.out.println(s.replaceAll(regex,"_"));

        regex = "^a{7,10}"; //匹配以a开头,匹配7到10个为一组,进行替换
        System.out.println(s.replaceAll(regex,"_"));

        regex = "^a{3,}"; //匹配以a开头,匹配3个以上为一组,进行替换
        System.out.println(s.replaceAll(regex,"_"));

    }
}

输出结果

	abcdfjabc@@1babc@
	_dfj_@1b_
	_aaaaabcdefg
	_bcdefg
	_bcdefg
	_aaabcdefg
	aaaaaabcdefg
	_bcdefg
元字符:分组()
public class Regular8 {

    public static void main(String[] args) {
        //分组
        //定义规则
        String regex = "ABC{3,}"; //匹配AB以及包含3个以上的C为一组
        String s = "abcccccABCCC12AabcABCxiaohuaCCCCCabcabcabc123";
        System.out.println(s.replaceAll(regex,"_"));

        regex = "(abc){3,}"; //匹配abc为一组出现了3次以上进行替换
        System.out.println(s.replaceAll(regex,"_"));

        regex = "ABC(123|abc|xiaohua){1,}";
        //匹配ABC为一组一组后出现上述任意内容的进行替换
        System.out.println(s.replaceAll(regex,"_"));
    }
}

输出结果

	abcccccABCCC12AabcABCxiaohuaCCCCCabcabcabc123
	abccccc_12AabcABCxiaohuaCCCCCabcabcabc123
	abcccccABCCC12AabcABCxiaohuaCCCCC_123
	abcccccABCCC12Aabc_CCCCCabcabcabc123
元字符:反向引用
public class Regular9 {

    public static void main(String[] args) {
        //2021-10-28 --> 10/28/2021
        //定义规则
        String regex = "(\d{4})-(\d{2})-(\d{2})";
        String s = "2021-10-28";
        System.out.println(s.replaceAll(regex,"$2/$3/$1"));

        //我现在不想要生成分组编号,怎么办呢? 可以通过?:实现
        regex = "(\d{4})-(?:\d{2})-(\d{2})";
        System.out.println(s.replaceAll(regex,"$2/$2/$1"));
    }
}

输出结果

	10/28/2021
	28/28/2021
三、校验手机号、邮箱号
public class test1 {

    public static void main(String[] args) {
        //Test1
        //定义规则
        String regex = "^1\d{10}";
        String phoneNum = "17353142512";
        boolean matches = phoneNum.matches(regex);
        System.out.println(matches);

        //Test2
        //定义规则
        String regex2 = "\w+@\w+\.com";
        String emailNum = "116587fdv2335@qdfsq.com";
        boolean matches1 = emailNum.matches(regex2);
        System.out.println(matches1);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354051.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号