處理類似 "你好,今天是@2015@年@7@月@15@日" 這樣的字串,需提取成對 @ 之間的子字串(如 2015、7、15),常見於解析特定格式的日誌或模板字串。若直接使用 split("@"),會得到包含空字串的陣列,需額外過濾。
一個簡潔的做法:在字串首尾各加一個不會出現的字元(如 "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" 確保分割後首尾元素為已知字元,不干擾業務資料。split("@") 會將連續 @@ 產生空字串元素,但因首尾固定,中間元素恰好對應成對符號間的內容(含空字串)。length-2 結束,正好跳過首尾輔助字元。若需保留分隔符或處理更複雜巢狀結構,可使用 Pattern.compile("@(.*?)@") 進行非貪婪匹配,逐一提取群組內容。但對於單純成對提取,上述字串操作效能更佳且無正則開銷。