JavaSE基础知识分享(十五)

写在前面

今天继续讲Java中的枚举和正则表达式的的知识!这部分说完,JavaSE部分的知识就结束了!

枚举

概述

枚举类用于描述有限个对象的类。自 JDK 1.5 起引入了对枚举类型的原生支持,简化了枚举的定义和使用。下面是 JDK 1.5 之前和之后的枚举类定义方式的比较。

JDK 1.5 之前的写法

  1. 创建枚举类的属性(成员变量)
    必须作为私有常量存在。

  2. 将构造方法私有化
    确保类的对象是有限个的,防止外部创建新的实例。

  3. 提供公共的静态 final 方法
    让外界获取枚举类中的多个对象。

  4. 提供公共的获取属性的方法

  5. 重写 toString() 方法
    提供一个有意义的字符串表示。

示例代码:

public class Season {
    // 枚举对象
    private static final Season SPRING = new Season("春天", "春暖花开");
    private static final Season SUMMER = new Season("夏天", "烈日炎炎");
    private static final Season AUTUMN = new Season("秋天", "秋高气爽");
    private static final Season WINTER = new Season("冬天", "寒风刺骨");

    // 枚举类的属性
    private final String name;
    private final String description;

    // 私有构造方法
    private Season(String name, String description) {
        this.name = name;
        this.description = description;
    }

    // 获取属性的方法
    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    // 重写 toString() 方法
    @Override
    public String toString() {
        return name + ": " + description;
    }

    // 提供公共的静态方法获取枚举对象
    public static Season[] values() {
        return new Season[] { SPRING, SUMMER, AUTUMN, WINTER };
    }
}

JDK 1.5 之后的写法

  1. 定义枚举对象
    在枚举类的开头定义所有的枚举常量。

  2. 创建枚举类的属性(成员变量)
    必须作为私有常量存在。

  3. 将构造方法私有化
    确保类的对象是有限个的。

  4. 提供公共的获取属性的方法

  5. 重写 toString() 方法
    提供有意义的字符串表示。

示例代码:

public enum Season {
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "烈日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "寒风刺骨");

    // 枚举类的属性
    private final String name;
    private final String description;

    // 构造方法私有化
    private Season(String name, String description) {
        this.name = name;
        this.description = description;
    }

    // 获取属性的方法
    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    // 重写 toString() 方法
    @Override
    public String toString() {
        return name + ": " + description;
    }
}

正则表达式

正则表达式是用于匹配字符串的一种工具。它可以用于验证输入的格式、提取字符串中的信息或替换字符串的内容。

正则表达式常用语法:

  • 字符类

    • [abc]:匹配 abc
    • [^abc]:匹配除了 abc 的任意字符。
    • [a-z]:匹配小写字母。
    • [A-Z]:匹配大写字母。
    • [0-9]:匹配数字。
  • 预定义字符类

    • \d:匹配数字(等同于 [0-9])。
    • \D:匹配非数字字符。
    • \w:匹配字母、数字或下划线(等同于 [a-zA-Z0-9_])。
    • \W:匹配非字母、数字和下划线字符。
    • \s:匹配空白字符(包括空格、制表符、换行符等)。
    • \S:匹配非空白字符。
  • 量词

    • *:匹配前面的字符零次或多次。
    • +:匹配前面的字符一次或多次。
    • ?:匹配前面的字符零次或一次。
    • {n}:匹配前面的字符正好 n 次。
    • {n,}:匹配前面的字符至少 n 次。
    • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
  • 边界匹配

    • ^:匹配字符串的开头。
    • $:匹配字符串的结尾。
  • 分组和捕获

    • ():将匹配的部分分组。
    • |:表示逻辑“或”操作符。
  • 转义字符

    • \:用于转义特殊字符,如 \.\*\? 等。

示例:

// Java 中使用正则表达式进行匹配
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexExample {
    public static void main(String[] args) {
        String regex = "\\d+"; // 匹配一个或多个数字
        String input = "There are 123 apples and 456 oranges.";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            System.out.println("Found number: " + matcher.group());
        }
    }
}