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个字符是否是1if (chs[0] == '1') {// 满足第1个字符是1// 4、判断第2个字符是否是3/5/7/8if (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*/// 字符串中只能有一个字符,并且这个字符只能是1String regex1 = "[1]";// 正则表达式String phone1 = "12";// 键盘录入boolean flag1 = phone1.matches(regex1);// System.out.println("flag1=" + flag1);// 给定的字符串只能有1个字符,并且这个字符只能为3/5/7/8String 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号校验

校验QQ号码:
(1)、长度为5-12位
(2)、必须为纯数字
(3)、第一个字母不能够为0

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<=12boolean 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、身份证号校验

校验身份证:
(1)、长度为18位
(2)、前面17位必须为纯数字
(3)、最后一位可以为X,也可以为数字
(4)、不用校验出生日期等

import java.util.Scanner;public class Regex4 {public static void main(String[] args) {// 校验身份证:1、总共18位字符 2、前面17位必须为数字,最后一位既可以为数字也可以为XScanner 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方法,返回值类型为booleanreturn false;}return txt.matches("[1][3578]\\d{9}");}public static void main(String[] args) {}
}

Step1:util 放工具类


Step2:把代码粘贴过去,打入名字后alt+/快捷键调出(只有eclipse有代码就有!)

6、测验2

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

二、切割

/*** Project Name:dt65_chapter16* File Name:Regex1.java* Package Name:cn.java.demo* Date:上午9:48:37* Copyright (c) 2018, bluemobi All Rights Reserved.*
*/package cn.java.demo;/*** Description: <br/>* Date: 上午9:48:37 <br/>* * @author LLL* @version* @see*/
public class Regex1 {public static void main(String[] args) {/*** 切割:所谓的切割是 将给定的字符串按照某种规则分割成多个子字符串*/String str1 = "张三,李四,王五,王二麻子";  //split(",")可以用,但统一加上\\String[] strings = str1.split("\\,");for (String temp : strings) {System.out.println(temp);}String str2 = "张三.李四.王五.王二麻子";  //split(".")不行,因为.在正则里表示任意字符,已经被使用了String[] strings = str1.split("\\.");for (String temp : strings) {System.out.println(temp);}String str3 = "张三 李四 王五 王二麻子 二狗子 赵六";String[] strings = str1.split("\\ ");for (String temp : strings) {System.out.println(temp);}String str4 = "张三 李四   王五     王二麻子   二狗子         赵六";String[] strings = str1.split("\\ +");for (String temp : strings) {System.out.println(temp);}String str5 = "张三-李四-王五-王二麻子";String[] strings = str1.split("\\-");for (String temp : strings) {System.out.println(temp);}}}张三
李四
王五
王二麻子

三、替换

/*** Project Name:dt65_chapter16* File Name:Regex2.java* Package Name:cn.java.demo* Date:上午10:34:14* Copyright (c) 2018, bluemobi All Rights Reserved.*
*/package cn.java.demo;/*** Description: 替换<br/>* Date: 上午10:34:14 <br/>* * @author LLL* @version* @see*/
public class Regex2 {public static void main(String[] args) {// 15999999999/*** 替换:所谓的替换是将给定字符串中满足正则要求的部分替换成指定的字符串。替换最终返回的结果类型为String*/String str1 = "仓桥家的东西不好吃,我们是绿茶店,我们的商品更好吃更优惠,联系电话:15912345678";// 仓桥家 绿茶String str2 = str1.replaceAll("1[3578]\\d{9}", "15999999999");System.out.println(str2);}}

叠词

/*** Project Name:dt65_chapter16* File Name:Regex3.java* Package Name:cn.java.demo* Date:上午11:02:29* Copyright (c) 2018, bluemobi All Rights Reserved.*
*/package cn.java.demo;/*** Description: <br/>* Date: 上午11:02:29 <br/>* * @author 丁鹏* @version* @see*/
public class Regex3 {public static void main(String[] args) {/*** 治结巴:"我..我....我..我....喜...喜...喜....欢...编...编.编.编....程"===>"我喜欢编程"<br>* 叠词:aa、aa、ccc*/String str1 = "我..我....我..我....喜...喜...喜....欢...编...编.编.编....程";// 1、第一次替换String str2 = str1.replaceAll("\\.+", "");System.out.println(str2);// 2、第2次替换/*** 叠词的正则:(.)\\1+<br>* 获取叠词中的一个字符:$1<br>*/String str3 = str2.replaceAll("(.)\\1+", "$1");System.out.println("str3=" + str3);}}我我我我喜喜喜欢编编编编程
str3=我喜欢编程

正则表达式(只能操作字符串类型)相关推荐

  1. python字典中的值只能是字符串类型_python字典key不能是可以是啥类型

    python中字典的key不能是可变类型.字典可存储任意类型对象,其中值可以取任何数据类型,但键必须是不可变的,如字符串.数字或元组.语法格式:[d = {key1 : value1, key2 : ...

  2. 系统性详解Redis操作Hash类型数据(带源码分析及测试结果)

    1 缘起 系统讲解Redis的Hash类型CURD, 帮助学习者系统且准确学习Hash数据操作, 逐步养成测试的好习惯, 本文较长,Hash的操作比较多,请耐心看, 既可以集中时间看,亦可以碎片时间学 ...

  3. python redis缓存_第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

  4. 3.1 Python 字符串类型常用操作及内置方法

    文章目录 1. Str 字符串 1.1 字符串 1.2 反斜杠 1. 字符串跨行书写 2. 转义字符 1.3 打印引号 1. 错误示例 2. 解决方法 1.4 三引号 1.5 原始字符串 1. 正确示 ...

  5. Python字符串类型及操作总结

    1.字符串表示 两种类型四种表示 单行-一对单引号或一对双引号 "python" 'python' 多行-一对三单引号或一对三双引号 '''python''' "&quo ...

  6. 正则表达式操作字符串

    概念 正则表达式(Regular Expression),又称规则表达式.正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串& ...

  7. Python基础语法全体系 | 深入剖析字符串类型及其操作

    <Python基础语法全体系>系列博文第二篇,本篇博文将详细深入讲解Python的字符串类型.包括转义字符.字符串格式化.序列相关方法及常用操作:大小写.删除空白.查找与替换.分割与连接等 ...

  8. Python字符串类型及操作

    1.字符串类型的表示 (一)字符串: 由0个或多个字符组成的有序字符序列. 字符串由一对单引号或一对双引号来表示,例如:"请输入带有符号的温度值","Python&quo ...

  9. 第二课--字符串类型及操作

    1.字符串类型的表示 0个多个字符组成的有序序列 字符串由一对单引号或者双引号表示,仅能表示单行 由一对三引号或三双引号表示,可以表示多行 字符串中如果想有单引号,则外面用双引号 字符串有正向递增:从 ...

  10. Python字符串类型及操作(含实例)

    字符串 由0个或多个字符组成的有序字符序列 字符串是字符的有序序列,可以对其中的字符进行索引 "智"是"智慧女孩千万不要秃头"的第0个字符 字符串有2类共四种表 ...

最新文章

  1. 176页报告辟谣自动化时代的就业危机(附下载)
  2. mysql数据库的增删改查命令_MySQL 初识别语句,数据库、表、行的增删改查
  3. 牛顿法求根号数(Python)
  4. android P监听SD卡热插拔执行symlink软链接的实现
  5. IOT(29)---深入解析物联网操作系统(架构/功能/实例分析)
  6. 洛谷4014最大/小费用最大流
  7. HPU--1189 Ou à
  8. opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()
  9. 一刷leetcode——树
  10. antd下拉框联动说明
  11. resize view from nib引起的子控制器视图(childviewcontroller)部分区域无响应
  12. NVIDIA Nsight Compute,Nsight Systems, Nsight Graphics,Nsight Deep Learning Designer简介-草稿
  13. 控制器设计:MIPS单周期CPU
  14. html 排版标签、文本格式化标签、图像标签、链接标签、注释标签、路径、锚点定位、base文本标签、pre标签、特殊字符
  15. 2019年Android GMS 认证 boot logo 最新要求
  16. 【学术相关】有什么事情是你读博以后才知道的?
  17. 田忌赛马(贪心算法)C++
  18. Linux中xxd的简单应用
  19. 数据库指南-SQL与NoSQL
  20. FilenameFilter

热门文章

  1. apple tv 开发_如何在新的Apple TV上管理存储空间
  2. 什么是云计算?云计算概念集合
  3. 渗透测试-使用metasploit的evasion模块生成后门木马
  4. 什么是Java api
  5. 千帆竞发势如虹 明光政策送东风 首届明光大赛来了
  6. linux 360云盘下载文件夹里,360安全云盘Linux版图文使用说明
  7. 软体机器人空间感知技术综述
  8. 浏览器内核(引擎)及css前缀
  9. 指数分布具有“无记忆性”
  10. 1.定义ddos僵尸网络