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

Posted clqbolg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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());
        }
    }

}

 

以上是关于2019-05-23 Java学习日记之正则表达式&常用工具类的主要内容,如果未能解决你的问题,请参考以下文章

少女学习日记——正则表达式专题篇

统计师的Python日记第九天:正则表达式

Python学习日记(十四) 正则表达式和re模块

菜鸟成长日记:Java基础篇4 --- 正则表达式

学习Java之正则表达式

Java基础学习笔记十三 常用API之正则表达式DateDateFormatCalendar