首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 字串截取:提取成對符號 @ 之間的內容

     編輯:程式設計綜合問答

處理類似 "你好,今天是@2015@年@7@月@15@日" 這樣的字串,需提取成對 @ 之間的子字串(如 2015、7、15),常見於解析特定格式的日誌或模板字串。若直接使用 split("@"),會得到包含空字串的陣列,需額外過濾。

巧用輔助字元與 StringBuilder 解析

一個簡潔的做法:在字串首尾各加一個不會出現的字元(如 "1"),再以 @ 分割,隨後略過首尾元素,將中間元素拼接即可。範例程式碼:

public static String extractBetweenPairs(String str, String delimiter) {
    String[] parts = ("1" + str + "1").split(delimiter);
    StringBuilder sb = new StringBuilder();
    for (int i = 1; i < parts.length - 1; i++) {
        sb.append(parts[i]);
    }
    return sb.toString();
}

public static void main(String[] args) {
    String a = "你好,今天是@2015@年@7@月@15@日";
    String b = "時間為@16@@:@@05@";
    System.out.println("a=" + extractBetweenPairs(a, "@")); // 輸出:2015715
    System.out.println("b=" + extractBetweenPairs(b, "@")); // 輸出:16:05
}

原理說明

  1. 首尾加 "1" 確保分割後首尾元素為已知字元,不干擾業務資料。
  2. split("@") 會將連續 @@ 產生空字串元素,但因首尾固定,中間元素恰好對應成對符號間的內容(含空字串)。
  3. 迴圈從索引 1 開始,到 length-2 結束,正好跳過首尾輔助字元。

替代方案:正則表達式

若需保留分隔符或處理更複雜巢狀結構,可使用 Pattern.compile("@(.*?)@") 進行非貪婪匹配,逐一提取群組內容。但對於單純成對提取,上述字串操作效能更佳且無正則開銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved