首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字符串拼接去除尾部多餘分隔符的三種高效方案

     編輯:Java 相關知識

問題背景

循環拼接字符串時,常產生多餘的尾部分隔符(如 "a,b,c,"),需移除最後一個逗號得到 "a,b,c"。

方案一:substring 截取(簡單但效能較低)

String memberNames = "";
for (int t = 0; t < memberLen; t++) {
    String memTemp = stafferMap.get(strMember[t]);
    if (memTemp != null) {
        memberNames += memTemp + ",";
    }
}
if (memberNames.length() > 0) {
    memberNames = memberNames.substring(0, memberNames.length() - 1);
}

缺點:字符串不可變,循環中 += 會頻繁創建新對象,GC 壓力大;substring 又創建一次對象。

方案二:StringBuilder + 邏輯判斷(推薦,標準庫無依賴)

StringBuilder sb = new StringBuilder();
for (int t = 0; t < memberLen; t++) {
    String memTemp = stafferMap.get(strMember[t]);
    if (memTemp != null) {
        if (sb.length() > 0) {
            sb.append(",");  // 非首個元素前加分隔符
        }
        sb.append(memTemp);
    }
}
String result = sb.toString();

優點:單次內存分配,無臨時對象,邏輯清晰,效能最優。

方案三:Java 8+ Stream API(函數式風格,代碼最簡潔)

String result = Arrays.stream(strMember)
    .map(stafferMap::get)
    .filter(Objects::nonNull)
    .collect(Collectors.joining(","));

適用場景:集合/數組轉字符串,可讀性極強,內部同樣基於 StringJoiner/StringBuilder 實現。

效能對比總結

方案時間複雜度內存分配可讀性推薦指數
substring 截取O(n²)極多中⭐
StringBuilder 判斷O(n)極少高⭐⭐⭐⭐⭐
Stream joiningO(n)少極高⭐⭐⭐⭐

最佳實踐建議

  1. 優先使用 StringBuilder 手動控制(無第三方依賴、效能可控)。
  2. Java 8+ 環境首選 Collectors.joining() 或 String.join()(簡潔表達意圖)。
  3. 避免在循環中直接 += 拼接字符串。
  4. Guava Joiner、Apache Commons StringUtils.join() 同樣優秀,視項目依賴選擇。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved