Java 異常處理與正規表示式詳解,例項演練及最佳實踐

小万哥丶發表於2024-03-13

Java 異常 - Try...Catch

在 Java 程式碼執行期間,可能會發生各種錯誤,包括程式設計師編碼錯誤、使用者輸入錯誤以及其他不可預料的狀況。

當錯誤發生時,Java 通常會停止並生成錯誤訊息,這個過程稱為丟擲異常。

try...catch 語句

try 語句允許您定義一段程式碼塊,並在其中測試是否發生錯誤。

catch 語句允許您定義一段程式碼塊,當 try 塊中發生錯誤時執行該程式碼塊。

try 和 catch 關鍵字成對使用,語法如下:

try {
  // 要嘗試的程式碼塊
} catch (Exception e) {
  // 處理錯誤的程式碼塊
}

示例:

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]); // 陣列越界錯誤
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    }
  }
}

輸出:

Something went wrong.

finally 語句

finally 語句允許您在 try...catch 語句之後執行一段程式碼,無論 try 塊中是否發生錯誤。

示例:

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]); // 陣列越界錯誤
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    } finally {
      System.out.println("The 'try catch' is finished.");
    }
  }
}

輸出:

Something went wrong.
The 'try catch' is finished.

throw 關鍵字

throw 關鍵字允許您建立自定義異常。

throw 關鍵字通常與異常型別一起使用。Java 中提供了許多異常型別,例如:

  • ArithmeticException
  • FileNotFoundException
  • ArrayIndexOutOfBoundsException
  • SecurityException

示例:

public class Main {
  static void checkAge(int age) {
    if (age < 18) {
      throw new ArithmeticException("Access denied - You must be at least 18 years old.");
    } else {
      System.out.println("Access granted - You are old enough!");
    }
  }

  public static void main(String[] args) {
    checkAge(15); // 年齡小於 18 歲
  }
}

輸出:

Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
  at Main.checkAge(Main.java:4)
  at Main.main(Main.java:12)
  • try...catch 語句用於處理 Java 程式碼中的異常。
  • finally 語句用於確保程式碼在任何情況下都會執行。
  • throw 關鍵字用於建立自定義異常。

建議:

  • 使用 try...catch 語句來處理可能發生的錯誤。
  • 使用 finally 語句來釋放資源或執行清理操作。
  • 僅在需要時使用 throw 關鍵字來建立自定義異常。

Java正規表示式

什麼是正規表示式?

正規表示式是一系列字元,形成一個搜尋模式。當你在文字中搜尋資料時,可以使用這個搜尋模式描述你要查詢的內容。

正規表示式可以是單個字元,也可以是更復雜的模式。

Java沒有內建的正規表示式類,但我們可以匯入java.util.regex包來使用正規表示式。該包包括以下類:

  • Pattern類 - 定義要在搜尋中使用的模式
  • Matcher類 - 用於搜尋模式
  • PatternSyntaxException類 - 指示正規表示式模式中的語法錯誤

示例

查詢句子中是否存在單詞"hello"的任何出現:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  public static void main(String[] args) {
    Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher("Visit hello!");
    boolean matchFound = matcher.find();
    if(matchFound) {
      System.out.println("匹配找到");
    } else {
      System.out.println("未找到匹配");
    }
  }
}

輸出:

匹配找到

示例解釋

在這個例子中,在句子中搜尋單詞"hello"。

  • 首先,使用Pattern.compile()方法建立模式。第一個引數指示正在搜尋的模式,第二個引數有一個標誌,表示搜尋應該是不區分大小寫的。第二個引數是可選的。
  • 使用matcher()方法在字串中搜尋模式。它返回一個包含有關所執行搜尋的資訊的Matcher物件。
  • find()方法在字串中找到模式時返回true,未找到時返回false。

標誌

compile()方法中的標誌更改搜尋的執行方式。以下是其中一些:

  • Pattern.CASE_INSENSITIVE - 在執行搜尋時將忽略字母的大小寫。
  • Pattern.LITERAL - 在執行搜尋時,模式中的特殊字元將不具有任何特殊含義,並且在執行搜尋時將被視為普通字元。
  • Pattern.UNICODE_CASE - 與CASE_INSENSITIVE標誌一起使用,還可以忽略英語字母以外的字母的大小寫。

正規表示式模式

Pattern.compile()方法的第一個引數是模式。它描述了正在搜尋的內容。

  • 方括號用於查詢一系列字元:

    表示式 描述
    [abc] 在方括號之間的選項中找到一個字元
    [^abc] 在方括號之間找到一個字元,但不是這些字元
    [0-9] 在範圍0到9之間找到一個字元

元字元

元字元是具有特殊含義的字元:

元字元 描述
| 查詢由|分隔的任何模式中的任何一個匹配項,例如:cat|dog|fish
. 查詢任何字元的一個例項
^ 在字串的開頭找到匹配項,例如:^Hello
$ 在字串的末尾找到匹配項,例如:World$
\d 查詢數字
\s 查詢空白字元
\b 在單詞的開頭找到匹配項,如\bWORD,或在單詞的結尾找到匹配項,如WORD\b
\uxxxx 查詢由十六進位制數xxxx指定的Unicode字元

量詞

量詞定義數量:

量詞 描述
n+ 匹配包含至少一個n的任何字串
n* 匹配包含零個或多個n的任何字串
n? 匹配包含零個或一個n的任何字串
n 匹配包含X個n的任何字串的序列
n 匹配包含X到Y個n的任何字串的序列
n 匹配包含至少X個n的任何字串

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關注

相關文章