Java正则表达式和枚举(Enum)

正则表达式:

涉及的正则表达式符号过多,以下只列出常用的一些正则表达式符号以及用法:

  • [ ]:括号里面代表任意的,如果是个范围,比如0-9,[ 0-9]就代表所有的数字
  • \d == [0-9] 代表的是数字
  • \D == [^0-9]代表的是非数字
  • \s == 空白字符(空格,tab键)
  • \w == [a-zA-Z0-9_]
  • \W == [^a-zA-Z0-9]
  • . == 任意字符
  • ?:出现了0次或者1次
  • +:代表出现了1次或者多次
  • *:代表出现了任意次
  • {n}:刚好 n次
  • {n,}:至少n次
  • {n,m}:至少n次,至多m次

部分使用代码如下:

java 复制代码
public class RegularDemo4 {
    public static void main(String[] args) {
       String str = "shujia小帅哥魏一民";
      String regular = "魏一民$";
       System.out.println(str.replaceAll(regular, "_"));

        /**
         * ?:出现了0次或者1次
         * +:代表出现了1次或者多次
         * *:代表出现了任意次
         */
       String str = "caaaaaabaaacdeaaaafg";
       String regular = "^a?";
       String regular = "^a+";
       String regular = "^a*";
      System.out.println(str.replaceAll(regular, "_"));
        String str = "cccaaaaaabcaaacdecaaaaaaaaaafg";
        String regular = "c{3}a{3}"; // cccaaa
       String regular = "ca{4,6}"; // caaaa caaaaaa
        String regular = "ca{4,}";
        System.out.println(str.replaceAll(regular, "_"));

    }
}
public class RegularDemo5 {
    public static void main(String[] args) {
        //将连续出现了3次以上的abc替换成_
       String regex = "abc{3,}"; //ab后面接着3次以上的c  abcccccccc
        String regex = "(abc){3,}"; //使用小括号将abc看作是一组,然后匹配这组出现了3次以上 abcabcabc
        String str = "abccccccccABC123ABC123abcABCabcabcabc123ABC123123"; // ABC(123){1,}
    System.out.println("要匹配的字符串为:\n" + str);
       System.out.println("==========================================");
       System.out.println(str.replaceAll(regex, "_"));

        //需求2:ABC后面跟上出现1次以上的123为一个整体进行匹配
        //ABC123123123
      regex = "ABC(123){1,}";
      System.out.println(str.replaceAll(regex, "_"));

        //需求3:ABC后面跟上出现1次以上的123或者abc为一个整体进行匹配  ABCabc  ABC123 ABCabcabc ABC123123123
        // ABC(123|abc){1,}
        //ABC123123
        //ABCabcabc
        regex = "ABC(123|abc){1,}";
        System.out.println(str.replaceAll(regex, "_"));
    }
}
public class RegularDemo6 {
    public static void main(String[] args) {
        //日期案例
        String str = "2022-03-28 dasdas 2022-04-05";
        String regex = "(\\d{4})-(\\d{2})-(\\d{2})";  // "xxxx-xx-xx"
        System.out.println(str.replaceAll(regex,"$3/$1")); // 03/28/2022 dasdas 04/05/2022

        //需求2:我不想你取出月份
        regex = "(\\d{4})-(?:\\d{2})-(\\d{2})";
        System.out.println(str.replaceAll(regex,"$2/$1"));
    }
}

小练习:编写一个java程序检验qq号是否符合规范
1、必须全部都是数字
2、必须是5-11
3、不能以0开头

代码:

java 复制代码
/*
        需求:编写一个java程序检验qq号是否符合规范
            1、必须全部都是数字
            2、必须是5-11
            3、不能以0开头

        通过对比发现,正则表达式的使用确实要比普通的if-else语句简洁。
        但是呢,我们虽然使用起来很方便,但是写这个规则过程比较的麻烦,因为正则表达式的目的是为了对字符串进行匹配,替换,切分,截取
        要保证我们写的正则表达式达到一个通用一个效果,所以写出一个正则表达式需要大量的数据进行寻找规则或规律,比较费事。

        1、正则表达式本质上也是一个字符串,只不过是由一些特殊的语法构成
        2、正则表达式这门技术,不依附于任意一门语言的,一个正则表达式可以在任意一门语言中使用


 */
public class RegularDemo1 {
    public static void main(String[] args) {
        String qq = "12465723"; // 5-11

//        System.out.println(yanZheng(qq));
        System.out.println(yanZheng2(qq));
    }

    public static boolean yanZheng2(String qq){
        return qq.matches("[1-9][0-9]{4,10}");
    }

    public static boolean yanZheng(String qq){
        boolean flag = false;
        char[] chars = qq.toCharArray();
        if(!qq.startsWith("0")){
            if(qq.length()>=5 && qq.length()<=11){
                boolean flag2 = true;
                for (char c : chars) {
                    if(!Character.isDigit(c)){
                        flag2 = false;
                        break;
                    }
                }
                flag = flag2;
            }
        }
        return flag;
    }
}
Enum枚举:

在jdk1.5之后,java提供了一关键词,可以描述一个枚举类 enum

1. 将枚举相关的对象放在开头
SPRING("春天", "春暖花开")
2. 创建枚举类的属性(成员遍历),必须是作为私有常量出现
3. 必须将构造方法私有化,这是为了保证类的对象是有限个的目的
4. 提供公共的获取属性的方法
5. 重写toString()方法

代码如下:

java 复制代码
enum Season2{
    //表示有限个对象,必须放在枚举类第一个部分
    SPRING("春天","春暖花开"),
    SUMMER("夏天","夏日炎炎"),
    AUTUMN("秋天","硕果累累"),
    WINTER("冬天","万里雪疆");
//用上面的枚举类写法代替了以下常规的写法
   public static final Season SPRING = new Season("春天","春暖花开");
    public static final Season SUMMER = new Season("夏天","夏日炎炎");
    public static final Season AUTUMN = new Season("秋天","硕果累累");
    public static final Season WINTER = new Season("冬天","万里雪疆");


    private String name;
    private String describe;

    private Season2(){}

    private Season2(String name,String describe){
        this.name = name;
        this.describe = describe;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescribe() {
        return describe;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", describe='" + describe + '\'' +
                '}';
    }
}


public class EnumDemo2 {
    public static void main(String[] args) {
        Season2 spring = Season2.SPRING;
        Season2 summer = Season2.SUMMER;

        System.out.println(spring);
        System.out.println(summer);
    }
}
相关推荐
腥臭腐朽的日子熠熠生辉10 分钟前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
ejinxian12 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之17 分钟前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码37 分钟前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
27669582921 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
爱的叹息1 小时前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
程序猿chen1 小时前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
松韬2 小时前
Spring + Redisson:从 0 到 1 搭建高可用分布式缓存系统
java·redis·分布式·spring·缓存
绝顶少年2 小时前
Spring Boot 注解:深度解析与应用场景
java·spring boot·后端