基础系列【十五】--Pattern

基础系列【十五】--Pattern

Pattern

java.lang.Object  java.util.regex.Pattern (public final class Pattern)
最终类,用来匹配或者验证默写规则
//匹配 abc/def/lmn 组成的字符串:[]--表示其中的一个
    String str = "afm";
    System.out.println(str.matches("[abc][def][lmn]"));//true
    //匹配一字母的组成
    //匹配起始字符-结束字符:表示连续范围
    System.out.println(str.matches("[a-zA-Z]"));
    //匹配任意一个数字
    System.out.println(str.matches("[0-9]"));
    //匹配除了a/g/m/x以外的任何一个字符
    System.out.println(str.matches("[^agmx]"));

    String str = "abb";
    //a.b的字符串,.表示任意字符
    System.out.println(str.matches("a.b"));
    // 在正则中如何匹配. ?
    // java中的转义的字符转义字符  \t \r \n \\ \' \" \b \f
    //\\.--java先转义--\.--正则在转义--.
    // 文件名后缀,小数
    System.out.println("\\.");
    // 如何匹配\ ?
    //路径--E:\\a.txt
    str =  "\\";
    //\\\\--java先转义--\\pattern在转义                                                                                                                                    --\
    System.out.println(str.matches("\\\\"));

   //数量词--一个字符只能跟一个数量词
    String str = "";
    //匹配以a开始以b结尾的字符串
    //*表示之前的字符出现0次或者多次>=0
    System.out.println(str.matches("a.*b"));
    str = "3m";
    //+表示之前的字符至少出现一次>=1即可
    //匹配以数字开头小写字母为结尾的至少有3个字符组成的字符串
    System.out.println(str.matches("\\d.+[a-z]"));

    //匹配以数字开头的至多有两个字符组成的字符串
    //? 表示小于等于1次
    System.out.println(str.matches("\\d.?"));

    //{n}:表示字符恰好出现几次
    //匹配由5个a组成的字符串
    System.out.println(str.matches("a{5}"));

    //至少有3个数字组成的字符串
    //{3,}
    System.out.println(str.matches(".{3,}"));

    //匹配长度在6-12之间的字符串
    //{m,n}
    System.out.println(str.matches(".{6,12}"));

 //匹配含有两个ab的字符串:contains:只能判断包含不能判断出现的次数
    //()--捕获组
    // \\n--引用前面对应编号的捕获组
    System.out.println("".matches(".*(ab).*\\1.*"));
    // 叠词
    System.out.println("".matches("(.)\\1+"));
    // aabb
    System.out.println("".matches("(.)\\1(.)\\2"));
    // (.)\\1--表示捕获一个字符,并且该字符至少出现两个
    // (.){2,}--表示至少两个字符
    // 捕获组的编号--从(出现的位置开始计算
    //(a(b(cd)e)f)(g)
    //1.(a(b(cd)e)f) 2.(b(cd)e) 3.(cd) 4.(g)
    // replaceAll()
    String str = "6adsfasdf23156asdfsadf56asdf777";
    //对字符串中的数字排序
    char[] cs = str.replaceAll("\\D", "").toCharArray();
    Arrays.sort(cs);
    System.out.println(Arrays.toString(cs));
    // public String[] split(String regex):作为切割符的字符会被切掉
    // 注意:如果切割符在字符串的尾段,会直接切掉。
    String[] strs = str.split("\\d");
    System.out.println(Arrays.toString(strs));//[, adsfasdf, , , , , asdfsadf, , asdf]
    //转义字符;有特殊含义的需要转义? * + {} () [] .,在[]中转义字符,只代表符号本身

练习:    
   // 1.匹配小数:00.21--不是小数
    String str = "";
    // |--前后两个表达没有关系
    String regex = "0\\.\\d*|[1-9]\\d*\\.\\d*";
    System.out.println("0.80".matches(regex));
    // 2.匹配密码{6,12},至少出现有数字/字母/_中的两个
    System.out.println(checkPassword("12345678910w"));
    // 3.匹配邮箱 --字母/数字/_@数字/字母/.com /.cn     qq.com  163.com 126.com

    String reg = "\\w{6,20}@[a-zA-Z0-9]{1,10}(\\.com)(\\.cn)?|\\w{6,20}@[a-zA-Z0-9]{1,10}(\\.cn)";
    System.out.println("123@qq.com.cn".matches(reg));
    // 4.统计每种字符出现的个数

    // 5.交换Amy和Tom的位置
    str = "Amy sj Tom";
    System.out.println(str.replaceAll("(Amy)(.*)(Tom)", "$3$2$1"));//Tom sj Amy

    // 6.把叠字替换为单字
    str = "aaabbddefff";
    System.out.println(str.replaceAll("(.)\\1+", "$1"));
    // 7.输入一个字符串来求这个字符串的平均碎片长度--aabbbccdee--aa bbb cc d ee
    //有多少个片段
    int len = str.length();
    System.out.println(len);
    str = str.replaceAll("(.)\\1+", "$1");
    System.out.println(str);
    System.out.println(len*1.0/str.length());
}
static boolean checkPassword(String password) {
    if (password == null) {
        return false;
    }
    // [a-zA-Z0-9_]
    if (!password.matches("\\w{6,13}")) {
        return false;
    }
    // 定义一个变量记录出现符号的个数
    int count = 0;
    // 判断密码是否包含数字
    if (password.matches(".*\\d.*")) {
        count++;
    }
    // 判断密码是否包含字符
    if (password.matches(".*[a-zA-Z].*")) {
        count++;
    }
    // 判断密码是否包含_
    if (password.matches(".*_.*")) {
        count++;
    }
    if(count>=2){
        return true;
    }
    return false;
}

下一篇:
基础系列【十六】–异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值