IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 正则表达式(字符串) -> 正文阅读

[开发工具]正则表达式(字符串)

Regular Expression
校验给定的字符串是否满足某种格式要求(合同)
优点:能够大大的简化代码量;
缺点:阅读性比较差,不能够精确到具体错误、只能测验出有误

在这里插入图片描述

一、匹配

在这里插入图片描述

1、手机号码校验

普通写法

import java.util.Scanner;

public class Regex1 {

    public static void main(String[] args) {
        /**
         * 手机号格式:<br>
         * 159xxx 13xxx 18xxx 17xxx<br>
         * 1、必须为11位的纯数字<br>
         * 2、第1个字符必须是1<br>
         * 3、第2个字符必须是3、5、7、8
         */
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个手机号码:");
        String phone = input.next();
        // 1.计算字符串的长度
        int len = phone.length();
        if (len == 11) {// 满足长度11位
            // 2、将字符串转化成字符数组
            char[] chs = phone.toCharArray();
            // 3、判断第1个字符是否是1
            if (chs[0] == '1') {// 满足第1个字符是1
                // 4、判断第2个字符是否是3/5/7/8
                if (chs[1] == '3' || chs[1] == '5' || chs[1] == '7' || chs[1] == '8') {
                    // 5、判断手机号码后9位是否是数字
                    boolean flag = true;// 手机号码11位都是数字
                    for (int i = 0; i < chs.length; i++) {
                        if (!('0' <= chs[i] && chs[i] <= '9')) {// 当前不是数字
                            flag = false;
                            break;
                        }
                    }
                    if (flag) {
                        System.out.println("亲,手机号码格式正确!!!");
                    } else {
                        System.out.println("亲,手机号码必须全部为数字");
                    }
                } else {
                    System.out.println("亲,你手机号码有误(第2个字母不正确)");
                }
            } else {
                System.out.println("亲,您输入的手机号码有误(第1个字符必须为1)");
            }
        } else {
            System.out.println("亲,您输入的手机号码长度有误!");
        }
    }

}

使用正则表达式

import java.util.Scanner;

public class Regex2 {

    public static void main(String[] args) {
        /**
         * 手机号格式:<br>
         * 159xxx 13xxx 18xxx 17xxx<br>
         * 1、必须为11位的纯数字<br>
         * 2、第1个字符必须是1<br>
         * 3、第2个字符必须是3、5、7、8
         */
        // 字符串中只能有一个字符,并且这个字符只能是1
        String regex1 = "[1]";// 正则表达式
        String phone1 = "12";// 键盘录入
        boolean flag1 = phone1.matches(regex1);
        // System.out.println("flag1=" + flag1);

        // 给定的字符串只能有1个字符,并且这个字符只能为3/5/7/8
        String regex2 = "[3578]";// 正则表达式
        String phone2 = "2";// 键盘录入
        boolean flag2 = phone2.matches(regex2);
        // System.out.println("flag2=" + flag2);

        String regex3 = "[1][3578]";// 正则表达式
        String phone3 = "1";// 键盘录入
        boolean flag3 = phone3.matches(regex3);
        // System.out.println("flag3=" + flag3);

        // String regex4 = "[0-9]";// 正则表达式
        String regex4 = "[a-zA-Z0-9]";// 正则表达式
        String phone4 = "N";// 键盘录入
        boolean flag4 = phone4.matches(regex4);
        // System.out.println("flag4=" + flag4);

        String regex5 = "[0-9]{9}";// 正则表达式
        String phone5 = "12345a789";// 键盘录入
        boolean flag5 = phone5.matches(regex5);
        // System.out.println("flag5=" + flag5);

        Scanner input = new Scanner(System.in);
        System.out.print("请您输入手机号码:");
        String phone = input.next();
        String regex = "[1][3578][0-9]{9}";
        boolean flag = phone.matches(regex);
        System.out.println(flag ? "手机号格式正确" : "手机号格式有误,请您重新输入!!!");
    }

}

2、QQ号

import java.util.Scanner;

public class Regex3 {

    public static void main(String[] args) {
        /**
         * QQ号码规则:<br>
         * 1、必须全部为数字<br>
         * 2、长度必须在5-12位之间
         */
        /**
         * 数量词一:<br>
         * X{n}:X出现的次数恰好为n次<br>
         * X{n,}:X出现的次数>=n<br>
         * X{n,m}:n<=X出现的次数<=m
         */
        String qq = "1234567891234";
        String regex = "[0-9]{5,12}";// 5<=X<=12
        boolean flag = qq.matches(regex);
        // System.out.println("flag=" + flag);

        /**
         * 数量词二:<br>
         * X*:X出现的次数>=0<br> 等价于 X{0,}
         * X+: X出现的次数>=1<br>
         * X?: X出现的次数<=1次,发生或不发生
         */
        boolean flag1 = "01".matches("[0-9]?");
        // System.out.println("flag1=" + flag1);

        boolean flag2 = "".matches("[0-9]+");
        // System.out.println("flag2=" + flag2);

        boolean flag3 = "123".matches("[0-9]*");
        System.out.println("flag3=" + flag3);

    }

}

3、身份证号

import java.util.Scanner;

public class Regex4 {

    public static void main(String[] args) {

        // 校验身份证:1、总共18位字符 2、前面17位必须为数字,最后一位既可以为数字也可以为X
        Scanner input = new Scanner(System.in);
        System.out.print("请输入您的身份证号:");
        String idcard = input.next();
        boolean flag1 = idcard.matches("[0-9]{17}[0-9X]");
        System.out.println("flag1=" + flag1);
    }

}

public class Regex5 {

    public static void main(String[] args) {

        /**
         * 身份证号规则:<br>
         * 1、位数可以为15位、也可以为18位<br>
         * 2、如果长度为15位的身份证号,必须全部为数字<br>
         * 3、如果长度为18位的身份证号,前17位必须为数字,最后一位可以为数字或者字母
         */
        Scanner input = new Scanner(System.in);
        System.out.print("请输入您的身份证号:");
        String idcard = input.next();
        boolean flag1 = idcard.matches("[0-9]{15}([0-9]{2}[0-9X])?");
        System.out.println("flag1=" + flag1);
    }

}

public class Regex6 {

    public static void main(String[] args) {

        /**
         * 身份证号规则:<br>
         * 1、位数可以为15位、也可以为18位<br>
         * 2、如果长度为15位的身份证号,必须全部为数字<br>
         * 3、如果长度为18位的身份证号,前17位必须为数字,最后一位可以为数字或者字母
         */
         
        /**
         * 预定义字符:<br>
         * [0-9]:给定的字符串只能有一个字符,并且此字符只能是数字===>\d<br>
         * [0-9a-zA-Z_]:单词字符====>\w
         */
         
        Scanner input = new Scanner(System.in);
        System.out.print("请输入您的身份证号:");
        String idcard = input.next();
        boolean flag1 = idcard.matches("\\d{15}(\\d{2}[0-9X])?");
        System.out.println("flag1=" + flag1);
        System.out.println("\\");
    }

}

Java的特点:“\\”代表现实中“\”(反,换行符等),“/”无影响(正,HTML).

4、邮箱

使用了RegexTool工具帮助查询正则表达式

import java.util.Scanner;

public class Regex7 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入姓名:");
        String username = input.next();
        boolean flag1 = username.matches("[\\u4e00-\\u9fa5]+");
        System.out.println("flag1=" + flag1);

        System.out.print("请输入邮箱:");
        String email = input.next();
        boolean flag2 = email.matches("\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+");
        System.out.println("flag2=" + flag2);
    }

}

5、测验1

定义一个工具类(RegexTool),工具类中有很多常用的正则方法,方法如下:
(1)、isChinese():判断一个字符串是否是中文,接收一个字符串类型参数,返回值类型为boolean
(2)、isEmail():判断一个字符串是否是邮箱,接收一个字符串类型参数,返回值类型为boolean
(3)、isPhone():判断一个字符串是否是手机号码,接收一个字符串类型参数,返回值类型为boolean
(4)、isAge():判断一个字符串是否是年龄(年龄只能为正整数),接收一个字符串类型参数,返回值类型为boolean
(5)、isIdCard():判断一个字符串是否是身份证,接收一个字符串类型参数,返回值类型为boolean

要求:方法全部为静态的。

/**
 * Project Name:dt65_chapter16
 * File Name:RegexTool.java
 * Package Name:cn.java.utils
 * Date:上午8:38:06
 * Copyright (c) 2021, bluemobi All Rights Reserved.
 *
*/

package cn.java.utils;

/**
 * Description: <br/>
 * Date: 上午8:38:06 <br/>
 * 
 * @author LLL
 * @version
 * @see
 */
public class RegexTool {

    /**
     * 
     * Description: 判断一个字符串是否全部是中文<br/>
     *
     * @author LLL
     * @param txt
     * @return
     */
    public static boolean isChinese(String txt) {// 静态方法
        String regex = "[\\u4e00-\\u9fa5]+";
        if (txt == null) {
            System.err.println("亲,字符串不能够为null");
            return false;
        } // else {return txt.matches(regex);}
        return txt.matches(regex);// 实例方法

    }

    /**
     * 
     * Description: 判断给定的字符串是否是手机号<br/>
     *
     * @author LLL
     * @param txt
     * @return
     */
    public static boolean isPhone(String txt) {
        if (txt == null) {// 匹配使用matches方法,返回值类型为boolean
            return false;
        }
        return txt.matches("[1][3578]\\d{9}");
    }

    public static void main(String[] args) {

    }
}

Step1:util 放工具类
在这里插入图片描述
在这里插入图片描述
Step2:把代码粘贴过去,打入名字后alt+/快捷键调出(只有eclipse有代码就有!)
在这里插入图片描述

6、测验2

从键盘录入姓名(要求必须为中文)、邮箱、手机号、年龄、身份证号
要求:调用RegexTool类中的方法来校验输入的信息

二、切割

三、替换

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:30:25  更:2021-07-16 11:32:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/8 7:41:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码