ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

day27 Java 动态代理 正则表达式

2021-10-28 23:03:37  阅读:194  来源: 互联网

标签:regex Java String 正则表达式 day27 System println public out


文章目录


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___

元字符:预定义类

/*
     元字符:
        预定义类:
            \d == [0-9] 数字
            \D == [^0-9] 非数字
            空白字符:[\t\n\x0B\f\r] == \s
            [^ \t\n\x0B\f\r] == \S
            \w == [a-zA-Z0-9]
            \W == [^a-zA-Z0-9]
            . 任何字符(与行结束符可能匹配也可能不匹配)
 */
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
	___________________________

边界字符

/*
        边界字符:
            ^:以xxx开头
            $:以xxx结尾
            \b:单词边界
            \B:非单词边界
 */
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

量词类

/*
        量词类:
            ?:出现0次或者1次
            +:出现1次或者多次
            *:出现任意次
            {n}:出现正好n次
            {n,m}:出现n-m次
            {n,}出现至少n次
 */
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

三、校验手机号、邮箱号

/*
        验证手机号码:
            1、手机号码都是11位,并且都是以1开头
            2、其余都是由数字组成

        验证邮箱是否符合:
            1、由数字字母@数字或者字母.com组成
 */
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);
    }
}

标签:regex,Java,String,正则表达式,day27,System,println,public,out
来源: https://blog.csdn.net/qq_41464008/article/details/121022705

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有