JavaSE基礎知識分享(十五)

ikestu小猪發表於2024-08-25

寫在前面

今天繼續講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());
        }
    }
}

相關文章