52_正则表达式

59 篇文章 2 订阅
13 篇文章 0 订阅

正则表达式:比较常用的规则(了解即可,没必要花时间琢磨)

这个不管是笔试还是面试基本上都不会考,而且以后开发中我们直接去网上搜一个贴过来一即可。不必费劲去写,写出来的可能还没有网上的那么完美。

  1. 概念:正则表达式就是一个“规则字符串”(可以理解为规则表达式,可以对字符串格式的指定),可以用于对字符串数据的格式进行验证,以及匹配、查 找、替换等操作。该字符串通常==使用^运算符作为开头标志,使用 运 算 符 作 为 结 尾 标 志 , 这 两 个 标 识 当 然 也 可 以 省 略 = = 。 说 到 底 就 是 一 个 字 符 串 , 只 不 过 这 个 字 符 串 可 以 用 开 头 , 运算符作为结尾标志,这两个标识当然也可以省 略==。说到底就是一个字符串,只不过这个字符串可以用^开头, ==结尾,可以对其他字符串进行验证、查找、匹配、替换等操作。

  2. **正则表达式的规则(了解)**在^和 $之间的内容

    可以出现什么的规则

    正则表达式 						说明
    [abc] 				可以出现a、b、c中任意一个字符
    [^abc] 				可以出现任何字符,除了a、b、c的任意字符
    [a-z] 				可以出现a、b、c、……、z中的任意一个字符
    [a-zA-Z0-9] 		可以出现a~z、A~Z0~9中任意一个字符
    
    正则表达式 						说明
    . 					任意一个字符(通常不包含换行符)
        
    \d 					任意一个数字字符,相当于[0-9]
    \D 					任意一个非数字字符
        
    \s 					空白字符,相当于[\t(制表符,将当前位置移到下一个tab位置)\n(回车换行符,将当前位置移到下一行的开头)\xOB(垂直制表符)\f(换页符,将当前位置移到下一页的开头)\r(回车不换行符,将当前位置移到本行的开头)]
    \S 					非空白字符
        
    \w 					任意一个单词字符,相当于[a-zA-Z_0-9],由数字字母下划线组成
        很多用户名、邮箱的规则就是由字母、数字、下划线组成。
        
    \W 					任意一个非单词字符
    

    数量的规则:X就是上边的可以出现什么的规则

    正则表达式 						说明
    X? 				表示X可以出现一次或一次也没有,也就是0 ~ 1X* 				表示X可以出现零次或多次,也就是0 ~ n次(*任意)
    X+ 				表示X可以出现一次或多次,也就是1 ~ n次
    X{n} 			表示X可以出现恰好 n 次
    X{n,} 			表示X可以出现至少 n 次,也就是>=n次
    X{n,m} 			表示X可以出现至少 n 次,但是不超过 m 次,也就是>=n并且<=m次
    
  3. 正则表达式相关的方法(熟悉)

    方法名称 										 方法说明
    boolean matches(String regex)		判断当前正在调用的字符串是否匹配参数指定的正则表达式规则,来自String类
        
        
    在java中要想用正则表达式大都使用这个方法
        
        
    正则表达式的全称:regular expression
        
    调用str .matches( regex )形式的此方法会产生与表达式完全相同的结果 
    	Pattern. matches(regex, str) 
        
    参数 
    	regex - 要与此字符串匹配的正则表达式 ,必须是正则表达式的字符串
        
    结果 
    	true if且仅当此字符串与给定的正则表达式匹配时 
        
    异常 
    	PatternSyntaxException - 如果正则表达式的语法无效 
        
    从以下版本开始: 
    	1.4 
    
    • 案例题目

      使用正则表达式描述一下银行卡密码的规则:要求是由6位数字组成。

      使用正则表达式描述一下QQ号码的规则:要求是由非0开头的5~15位数组成。

      使用正则表达式描述一下手机号码的规则:要求是由1开头,第二位数是3、4、5、7、8中的一 位,总共11位

      描述身份证号码的规则:总共18位,6位数字代表地区,4位数字代表年,2位数字代表月,2位数 字代表日期, 3位数字代表个人,最后一位可能数字也可能是X

package com.huang.task02;
     
     import java.util.Scanner;
     
     /**
      * @author hhc19
      * @date 2022/1/5 1:22
   * @description
      */
     public class StringRegTest {
     
         public static void main(String[] args) {
     
             System.out.println("请输入银行卡密码:");
             String regex = "^\\d{6}$"; // 正则表达式使用\d等等必须要转义才有用
             regex = "^[0-9]{6}$";
             Scanner s = new Scanner(System.in);
             if (s.next().matches(regex)) {
                 System.out.println("输入字符串的格式正确!");
             } else {
                 System.out.println("输入字符串的格式错误!");
             }
     
             // 1.定义描述规则的正则表达式字符串并使用变量记录
             // 正则表达式只能对数据格式进行验证,无法对数据内容的正确性进行检查,内容的正确性检查需要后台查询数据库
             // 描述银行卡密码的规则:由6位数字组成,恰好是6位,多了也不行,少了也不行
             //String reg = "^[0-9]{6}$"; // 或 String reg = "^\\d{6}$";
             //String reg = "[0-9]{6}"; // 前后的标识可以省略
             //String reg = "\\d{6}"; // 简化写法:在Java中想要输出\字符串需要加一个\进行转义
             // 使用正则表达式描述一下QQ号码的规则:要求是由非0开头的5~15位数字组成。
             //String reg = "[1-9]\\d{4,14}"; // {m,n}中不能加多余的空格且只服务于前一个规则而不是所有规则
             //使用正则表达式描述一下手机号码的规则:要求是由1开头,第二位数是3、4、5、7、8中的一位,总共11位
             //String reg = "1[34578]\\d{9}"; \\ 如果不是^、$之类的特殊字符,我们想要的就是字符本身比如:1,我们直接写1即可
             //描述身份证号码的规则:总共18位,6位数字代表地区,4位数字代表年,2位数字代表月,2位数字代表日期, 3位数字代表个人,
             // 最后一位可能数字也可能是X。
             String reg = "(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9|X])";
             // | 在Java中代表按位或,在正则表达式中也代表或者,()在这里代表分组的概念,每个小括号括起的内容都是一个整体。
             // 2.提示用户从键盘输入指定的内容并使用变量记录
             Scanner sc = new Scanner(System.in);
             while(true) {
                 //System.out.println("请输入您的银行卡密码:");
                 //System.out.println("请输入您的QQ号码:");
                 //System.out.println("请输入您的手机号码:");
                 System.out.println("请输入您的身份证号码:");
                 String str = sc.next();
     
                 // 3.判断用户输入的字符串内容是否满足指定的规则并打印
                 if (str.matches(reg)) {
                     //System.out.println("银行卡密码的格式正确!");
                     System.out.println("输入字符串的格式正确!");
                     break;
                 } else {
                     //System.out.println("银行卡密码的格式错误!");
                     System.out.println("输入字符串的格式错误!");
                 }
             }
         }
     }
  • 正则表达式只能对数据格式进行验证,无法对数据内容的正确性进行检查,内容的正确性检查需要后台查询数据库

  • 简易写法:在Java中想要输出\字符串需要加一个\进行转义

  • | 在Java中代表按位或,在正则表达式中也代表或者,()在这里代表分组的概念,每个小括号括起的内容都是一个整体。

  • 在以后的开发中类似于这种要对数据的格式进行校验的,我们就用正则表达式即可,至于数据内容就得查数据库了

方法名称 												方法说明
String[] split(String regex)				参数regex为正则表达式,以regex所表示的字符串为分隔
    									  符,将字符串拆分成字符串数组,对字符串进行切割
String replace(char oldChar, char newChar)	 使用参数newChar替换此字符串中出现的所有参数oldChar
    										单个字符的替换
String replaceFirst(String regex, String replacement) 替换此字符串匹配给定的正则表达式的第一个子字符串
String replaceAll(String regex, String replacement) 将字符串中匹配正则表达式regex的字符串替换成replacement
package com.huang.task02;

public class StringRegMethodTest {

    public static void main(String[] args) {

        // 1.准备一个字符串对象并打印
        String str1 = "1001,zhangfei,30";
        System.out.println("str1 = " + str1); // 1001,zhangfei,30
        // 2.按照逗号对字符串内容进行切割
        String[] sArr = str1.split(","); // 特殊字符需要使用\去转义
        for (int i = 0; i < sArr.length; i++) {
            System.out.println("下标为" + i + "的字符串是:" + sArr[i]); // 1001 zhangfei 30
        }

        System.out.println("--------------------------------------------------------------");
        // 3.准备一个字符串内容并进行替换
        String str2 = "我的小名叫大帅哥";
        // 将字符串中所有的字符'我'替换为'你'          单个字符的替换
        String str3 = str2.replace('我', '你');
        // 字符串的本身不可改变,我们只能在替换的同时创建一个新的字符串来实现此功能
        System.out.println("str2 = " + str2); // 我的小名叫大帅哥
        System.out.println("str3 = " + str3); // 你的小名叫大帅哥
        // 将字符串中所有的字符'大'替换为'小'
        String str4 = str3.replace('大', '小');
        System.out.println("str4 = " + str4); // 你的小名叫小帅哥
        // 将字符串中所有的字符'小'替换为'大'
        String str5 = str4.replace('小', '大');
        System.out.println("str5 = " + str5); // 你的大名叫大帅哥   全部替换

        System.out.println("--------------------------------------------------------------");
        // 4.准备一个字符串进行字符串内容的替换
        String str6 = "123abc456def789ghi";
        // 将 第一个 数字字符串替换为"#" 只要是数字,且至少一个
        String str7 = str6.replaceFirst("\\d+", "#");
        System.out.println("替换第一个字符串后的结果是:" + str7); // #abc456def789ghi
        // 将 所有 字母字符串替换为"$$$"  $会报错:非法参数异常,$是特殊字符
        String str8 = str7.replaceAll("[a-z]+", "ABC");
        System.out.println("str8 = " + str8); // #A456A789A

    }
}

public static String join(CharSequence delimiter, CharSequence... elements)
返回由CharSequence elements的副本组成的新String,该副本与指定的delimiter的副本连接在一起。 
For example, 

     String message = String.join("-", "Java", "is", "cool");
     // message returned is: "Java-is-cool"
 请注意,如果元素为null,则添加"null" 。 
     
参数 
     
delimiter - 用于分隔每个元素的分隔符 
elements - 要连接在一起的元素。 
     
结果 
一个新的 String ,它由所述的 elements由分离 delimiter 
     
异常 
NullPointerException - 如果 delimiter或 elements是 null 
     
从以下版本开始: 
1.8 

package com.huang.task02;

/**
 * @author hhc19
 * @date 2022/1/5 2:26
 * @description
 */
public class StringJoin {

    public static void main(String[] args) {

        String str1 = null;
        // String str = String.join("-", str1); // null  Warning: Value 'str1' is always 'null'
        // String str = String.join(str1, "aaa", "aaa"); // java.lang.NullPointerException
        String str = String.join("-", str1, str1); // null-null
        System.out.println(str);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值