2019-05-23 Java学习日记之正则表达式&常用工具类

正则表达式

概述:

是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.

其实就是一种规则.有自己特殊的应用.

作用:

比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,

这个限制长度的事情就是正则表达式做的

package com.regex;

public class Demo1 {

    public static void main(String[] args) {
        // 非正则表达式实现
        System.out.println(checkQQ("012345"));
        // 正则表达式实现
        String regex = "[1-9]\\d{4,14}";
        System.out.println("111111".matches(regex));
    }

    /**
     * 需求:校验qq号码
     * 1、要求必须是5-15位数字 
     * 2、开头不能为0 
     * 3、必须都是数字 
     * 校验qq 
     * 1、明确返回值类型boolean
     * 2、明确参数列表String qq
     */

    public static boolean checkQQ(String qq) {
        boolean flag = true; // 如果校验qq不符合要求就把flag设置为false,如果符合要求则直接返回

        if (qq.length() >= 5 && qq.length() <= 15) {
            if (!qq.startsWith("0")) {
                char[] arr = qq.toCharArray(); // 将字符串转换成字符数组
                for (int i = 0; i < arr.length; i++) {
                    char ch = arr[i];
                    if (!(ch >= '0' && ch <= '9')) {
                        flag = false; // 不是数字
                        break;
                    }
                }
            } else {
                flag = false; // 以0开头,不符合qq标准
            }
        } else {
            flag = false; // 长度不符合
        }
        return flag;
    }

}

 正则表达式的分割功能:

String类的功能:public String[ ] split(String regex)

把给定字符串中的数字排序:

package com.regex;

import java.util.Arrays;

public class Test1 {
    /**
     * 需求:将"91 27 46 38 50"这个字符串通过代码实现输出"27 38 46 50 91"这个结果
     * 分析:
     * 1,将字符查UN切割成字符串数组
     * 2,将字符串转换成数字并将其存储在一个等长度的int数组中
     * 3,排序
     * 4,将排序后的结果遍历并拼接成一个字符串
     */
    public static void main(String[] args) {
        String s = "91 27 46 38 50";
        //1,将字符查UN切割成字符串数组
        String[] sArr = s.split(" ");
        // 2,将字符串转换成数字并将其存储在一个等长度的int数组中
        int[] arr = new int[sArr.length];
        for (int i = 0; i < arr.length; i++) {    
            arr[i] = Integer.parseInt(sArr[i]);        //将数字字符串转换成数字
        }
        //3,排序
        Arrays.sort(arr);
        //4,将排序后的结果遍历并拼接成一个字符串
        /*String str = "";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                str += arr[i];
            }else {
                str += arr[i] + " ";
            }
        }
        System.out.println(str);*/
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            }else {
                sb.append(arr[i] + " ");
            }
        }
        System.out.println(sb);
    }

}

正则表达式的分组功能:

捕获组可以通过从左到右计算其开括号来编号.

组零始终代表整个表达式

a:切割

需求:请按照叠词切割:"adqqfgkkkjppppa1"

b:替换

需求:我我我...我..我.我...爱爱爱....爱.爱..爱...学..学.学.学学学......习习习习.习.习

将字符串还原成:我爱学习

    public static void demo3() {
        String s = "我我我...我..我.我...爱爱爱....爱.爱..爱...学..学.学.学学学......习习习习.习.习";
        String s2 = s.replaceAll("\\.", "");
        String s3 = s2.replaceAll("(.)\\1+", "$1");    //$1代表第一组中的内容
        System.out.println(s3);
    }

    public static void demo2() {
        String s = "adqqfgkkkjppppa1";
        String regex = "(.)\\1+";        //+代表第一组出险一次到多次
        String[] arr = s.split(regex);
        
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static void demo1() {
        //叠词 快快乐乐,高高兴兴
        /*String regex = "(.)\\1(.)\\2";
        System.out.println("快快乐乐".matches(regex));
        System.out.println("快快快乐".matches(regex));
        System.out.println("快乐快乐".matches(regex));
        System.out.println("高高兴兴".matches(regex));*/
        
        //叠词 死啦死啦,快快乐乐
        String regex = "(..)\\1";
        System.out.println("死啦死啦".matches(regex));
        System.out.println("快快快乐".matches(regex));
        System.out.println("快乐快乐".matches(regex));
        System.out.println("高高兴兴".matches(regex));
    }

Pattern和Matcher:

模式和匹配器的典型调用顺序:

Pattern p = Pattern.compile("a*b");

Matcher m = p.matcher("aaaaab");

boolean b = m.matchers();

正则表达式的获取功能:

Pattern和Matcher的结合使用

需求:把一个字符串中的手机号码获取出来

package com.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo3 {

    public static void main(String[] args) {
        String s  = "我的手机号码是:13912345678,曾经用过13838383388,还有13345678910";
        
        String regex = "1[3578]\\d{9}";        //手机号码的正则表达式
        
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());
        }
    }

}

猜你喜欢

转载自www.cnblogs.com/clqbolg/p/10915758.html