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);
    }
}
相关推荐
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7894 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~5 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
程序媛小果5 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot