使用正則表示式從較長字串中提取單引號括起來的字串的 Java 程式


正則表示式正則表示式 是一種用於模式匹配和字串操作的語言。它由一系列定義搜尋模式的字元組成,可用於執行搜尋、替換甚至驗證文字輸入等操作。正則表示式由一系列字元和符號組成,這些字元和符號構成一個搜尋模式。

在本文中,我們將瞭解如何編寫一個 Java 程式,使用正則表示式從較長字串中提取用單引號括起來的字串。

Java 透過java.util.regex 包提供對正則表示式的支援。Pattern 類表示已編譯的正則表示式,Matcher 類可用於將模式與給定的輸入字串進行匹配。

問題陳述

編寫一個 Java 程式,使用正則表示式從較長字串中提取一個或多個用單引號括起來的子字串。該程式應能夠處理此類子字串的單次和多次出現。

輸入

input = "This is a 'single quote' enclosed string"

輸出

single quote

用單引號括起來的單個子字串

以下是使用正則表示式從較長字串中提取用單引號括起來的字串的步驟:

  • 匯入必要的類。
  • 宣告一個包含輸入文字的字串變數。
  • 我們將透過使用Pattern.compile() 方法建立一個正則表示式模式,以定義匹配單引號內文字的正則表示式模式。
  • 透過使用Pattern.matcher() 方法和輸入字串例項化 Matcher 物件來建立 Matcher 物件。
  • 透過使用find() 方法在輸入字串中搜索模式。如果找到,則使用 group(1) 方法提取子字串。
  • 列印提取的子字串。

示例

在下面的示例中,我們將首先定義輸入字串以及我們要匹配的正則表示式模式。模式 '(_+?)' 匹配單引號內任意字元序列,而部分 _*? 匹配任意字元 0 次或多次,但儘可能少地匹配,以便允許其餘模式匹配。

然後,我們從模式建立一個 Matcher 物件,以使用 find 方法將其應用於輸入字串。如果模式匹配,我們使用group() 方法和引數 1 提取匹配的字串,該引數代表模式中的第一個捕獲組。這是此方法的缺點,因為它不會捕獲所有用單引號括起來的子字串組。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringExtractor {
   public static void main(String[] args) {
      String input = "This is a 'single quote' enclosed string";
      Pattern pattern = Pattern.compile("'(.*?)'");
      Matcher matcher = pattern.matcher(input);
        
      if (matcher.find()) {
         String extractedString = matcher.group(1);
         System.out.println(extractedString);
      }
   }
}

輸出

single quote

多個用單引號括起來的子字串

以下是使用正則表示式從較長字串中提取用單引號括起來的字串的步驟:

  • 匯入必要的類。
  • 宣告一個包含輸入文字的字串變數。
  • 使用Pattern.compile()定義匹配單引號內文字的正則表示式模式。
  • 使用輸入字串例項化 Matcher 物件。
  • 建立一個列表以儲存所有匹配的子字串。
  • 使用 while 迴圈使用find() 方法查詢輸入字串中的所有匹配項。使用 group(1) 提取每個匹配項並將其新增到列表中。
  • 遍歷列表並列印每個提取的子字串。

示例

上述方法有一個主要的缺點,即它過於簡單,無法從輸入字串中提取多個用單引號括起來的子字串,並且只提取了第一次出現的子字串。這是先前方法的更新和高階版本,因為它能夠提取多次出現的子字串。我們使用 while 迴圈進行迭代並繼續搜尋匹配項,直到輸入字串中沒有匹配項為止。matches 列表用於儲存所有提取的字串,並由該方法返回。main 方法演示瞭如何使用更新的extractStringsWithRegex() 方法提取所有用單引號括起來的字串。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;
public class StringExtractor {    
   public static List<String> extractStringsWithRegex(String input) {
      // This function takes string as input, iterates over to search for regex matches
      // and stores them in a List named matches which is finally returned in the end
      Pattern pattern = Pattern.compile("'(.*?)'");
      Matcher matcher = pattern.matcher(input);
      List<String> matches = new ArrayList<>();
      while (matcher.find()) {
         matches.add(matcher.group(1));
      }
      return matches;
   }   
   public static void main(String[] args) {
      String input = "This is a 'test' string with 'multiple' 'single quote' enclosed 'words'";
      List<String> matches = extractStringsWithRegex(input);
      for (String match : matches) {
         System.out.println(match);
      }
   }
}

輸出

test
multiple
single quote
words

使用正則表示式從較長字串中提取用單引號括起來的字串的 Java 程式具有一些優點和缺點,如下所示。

優點

  • 正則表示式功能強大,允許匹配用單引號括起來的字串,甚至可以匹配更復雜的模式。

  • Matcher 類為我們提供了更多用於處理匹配字串的方法,例如查詢匹配項的起始和結束索引。

缺點

  • 與其他方法相比,編寫和理解正則表示式可能更難理解。

  • 與其他方法相比,正則表示式可能較慢,尤其是在處理大型輸入字串或複雜模式時。

結論

有多種方法可以提取用單引號括起來的字串,最常見的方法是正則表示式、split()substring() 方法。正則表示式是一個功能強大且靈活的選項,尤其是在處理複雜模式時,儘管對於大型字串來說它可能較慢。Pattern 類定義正則表示式模式,而Matcher 類將其應用於輸入字串並提取匹配的文字。正則表示式廣泛用於驗證使用者輸入和操作文字等任務,但務必仔細設計和測試模式以有效地處理所有邊緣情況。

更新於:2024-09-16

984 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.