正则表达式

1.体验

1.需求

验证QQ号是否合法,首位不能是0,长度6-20,必须纯数字

2.没有正则表达式

java 复制代码
package cn.hdc.opp6.zhengzebiaodashi;

public class Main1 {
    public static void main(String[] args) {
        System.out.println(checkQQ("2652110187"));
    }

    public static boolean checkQQ(String QQ) {
        if (QQ == null || QQ.charAt(0) == '0' || QQ.length() < 6 || QQ.length() > 20) {
            return false;
        }
        for (int i = 0; i < QQ.length(); i++) {
            if (QQ.charAt(i) < 48 || QQ.charAt(i) > 57) {
                return false;
            }
        }
        return true;
    }
}

3.使用正则表达式

java 复制代码
package cn.hdc.opp6.zhengzebiaodashi;

public class Main1 {
    public static void main(String[] args) {
        System.out.println(checkQQ1("2652110187"));
    }

    public static boolean checkQQ1(String QQ) {
        return QQ != null && QQ.matches("[1-9]\\d{5,19}");
    }
}

2.正则表达式

案例

java 复制代码
package cn.hdc.opp6.ZhengZedemo;

import java.util.Scanner;

public class d1 {
    public static void main(String[] args) {
        checkPhone();
    }

    private static void checkPhone() {
        while (true) {
            System.out.println("请输入你的时间:");
            Scanner sc = new Scanner(System.in);
            String phone = sc.nextLine();
//            if (phone.matches("[0-2]?[0-3]点[0-5]?[0-9]分[0-5]?[0-9]秒")) {
            if (phone.matches("([01]?[0-9]|2[0-3])点([0-5]?[0-9])分([0-5]?[0-9])秒")) {
                System.out.println(true);
//                break;
            } else {
                System.out.println(false);
            }
        }

/*
        while (true) {
            System.out.println("请输入你的邮箱:");
            Scanner sc = new Scanner(System.in);
            String phone = sc.nextLine();
            if (phone.matches("\\w{2,}@[a-zA-Z0-9]{2,20}(\\.\\w{2,10}){1,2}")) {
                System.out.println(true);
                break;
            } else {
                System.out.println(false);
            }
        }
*/
/*
        while (true) {
            System.out.println("请输入你的手机号:");
            Scanner sc = new Scanner(System.in);
            String phone = sc.nextLine();
            if (phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})")) {
                System.out.println(true);
                break;
            } else {
                System.out.println(false);
            }
        }
*/
    }

}

爬取信息

java 复制代码
package cn.hdc.opp6.ZhengZeSelect;

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

public class Main {
    public static void main(String[] args) {
        queryInfo();
    }

    private static void queryInfo() {
        String str =
                "来黑马程序员学习Java\n" +
                        "电话:18512516758,18512508907\n" +
                        "或者联系邮箱: boniu@itcast.cn\n" +
                        "座机电话:01036517895,010-98951256\n" +
                        "邮箱:bozai@itcast.cn\n" +
                        "邮箱2:dlei0009@163.com\n" +
                        "热线电话:400-618-9090,400-618-4000\n" +
                        "4006184000,4006189090";
        //爬取电话
        String regex =
                "(1[3-9]\\d{9})|" +
                        //爬取邮箱
                        "(\\w{1,}@\\w{2,10}\\.(\\w{2,10}){1,2})|" +
                        //爬取座机号码
                        "010[- ]?\\d{3,8}|" +
                        //爬取热线
                        "400[- ]?\\d{3,8}[- ]?\\d{3,8}";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group());
        }

    }
}

搜索、替换内容

java 复制代码
private static void queryUserName() {
        String str = "来黑马程序员学习Java\n" +
                "电话:18512516758,18512508907\n" +
                "或者联系邮箱: boniu@itcast.cn\n" +
                "座机电话:01036517895,010-98951256\n" +
                "邮箱:bozai@itcast.cn\n" +
                "邮箱2:dlei0009@163.com\n" +
                "热线电话:400-618-9090,400-618-4000\n" +
                "4006184000,4006189090";
        String regex = "\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        while (m.find()) {
            String res = m.group().split("@")[0];
            System.out.println(res);
        }
    }

java 复制代码
package cn.hdc.opp6.ZhengZeSelect;

import java.util.Arrays;

public class ReplaceAndSplit {
    public static void main(String[] args) {
        //1、public String replaceAll(String regex,String newstr):按照正则表达式匹配的内容进行替换
        // 需求1:请把 古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中间的非中文字符替换成"_"
        String str = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        String regex = "\\w+";
        System.out.println(str.replaceAll(regex, "-"));
        // 需求2(拓展):某语音系统,收到一个口吃的人说的 "我我我喜欢编编编编编编编编编编编编程程程!",需要优化成 "我喜欢编程!"
        String str1 = "我我我喜欢编编编编编编编编编编编编程程程!";
        String reges1 = "(.)\\1+";
        /**
         * (.)代表任意一组,.代表匹配任意字符
         * \\1  :为这个组声明一个组号:1号(一定用\\1,这是规定好的)
         * +    :声明必须是重复的字:一次以上
         * $1   :取到第一组代表的那个重复的字
         */
        System.out.println(str1.replaceAll(reges1, "$1"));
        // 2、public string[] split(String regex):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。
        //需求1:请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中的人名获取出来。
        String str2 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        String regex2 = "\\w+";
        System.out.println(Arrays.toString(str2.split(regex2)));
    }
}
相关推荐
10km几秒前
java:延迟加载实现方案对比:双重检查锁定 vs 原子化条件更新
java·延迟加载·双重检查锁定
qq_401700414 分钟前
C语言void*
c语言·开发语言
sg_knight5 分钟前
Python 面向对象基础复习
开发语言·python·ai编程·面向对象·模型
独自归家的兔7 分钟前
千问通义plus - 代码解释器的使用
java·人工智能
biter down21 分钟前
C++ 解决海量数据 TopK 问题:小根堆高效解法
c++·算法
用户66006766853924 分钟前
斐波那契数列:从递归到缓存优化的极致拆解
前端·javascript·算法
嘟嘟w27 分钟前
什么是UUID,怎么组成的?
java
通往曙光的路上30 分钟前
认证--JSON
java
初夏睡觉30 分钟前
P1055 [NOIP 2008 普及组] ISBN 号码
算法·p1055
程芯带你刷C语言简单算法题34 分钟前
Day28~实现strlen、strcpy、strncpy、strcat、strncat
c语言·c++·算法·c