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

Java 集合/陣列轉字串實用指南:手動拼接、String.join、Stream API 全方位對比

     編輯:Java 綜合教學

Java 集合/陣列轉字串實用指南:手動拼接、String.join、Stream API 全方位對比

將 List、Set、陣列轉為帶分隔符的字串是高頻需求。本文從手動迴圈、JDK 8+ String.join、Stream API、第三方庫四個維度,提供最佳實踐與效能建議。

一、集合轉字串

1. 手動迴圈(JDK 7 及之前)

List numList = new ArrayList<>();
for (int i = 1; i < 10; i++) numList.add(String.valueOf(i));

StringBuilder sb = new StringBuilder();
for (int i = 0; i < numList.size(); i++) {
    if (i > 0) sb.append(",");
    sb.append(numList.get(i));
}
String result = sb.toString(); // "1,2,3,4,5,6,7,8,9"
  • 使用 StringBuilder 避免字串不可變帶來的大量對象創建。
  • 需自行處理分隔符邏輯,易出錯(首尾多逗號、空集合)。

2. String.join (JDK 8+)

String result = String.join(",", numList); // 一行搞定,自動處理空集合返回 ""
  • 靜態方法,參數為 CharSequence delimiter, CharSequence... elements 或 Iterable<? extends CharSequence>。
  • 元素必須實作 CharSequence(String 滿足),非 String 集合需先轉換。

3. Stream API (JDK 8+)

// 非 String 集合:先 map 轉字串
List intList = Arrays.asList(1,2,3,4,5);
String result = intList.stream()
    .map(String::valueOf)
    .collect(Collectors.joining(",")); // "1,2,3,4,5"

// 可自定前綴/後綴
String result2 = intList.stream()
    .map(String::valueOf)
    .collect(Collectors.joining(",", "[", "]")); // "[1,2,3,4,5]"
  • 函數式風格,支援並行流 .parallelStream() 處理大集合。
  • Collectors.joining 內部使用 StringJoiner,效能優於手動拼接。

4. Apache Commons Lang / Guava

// Commons Lang
String result = StringUtils.join(numList, ",");

// Guava
String result = Joiner.on(",").join(numList);
  • 舊專案常用,功能豐富(skipNulls, useForNull 等)。

二、陣列轉字串

1. String.join 直接支援陣列

String[] arr = {"abc", "123", "@#&"};
String result = String.join("", arr); // "abc123@#&" (無分隔符)
String result2 = String.join("-", arr); // "abc-123-@#&"

2. Arrays.toString (固定格式 [a, b, c])

String result = Arrays.toString(arr); // "[abc, 123, @#&]"
  • 適合除錯日誌,不可自定分隔符。

3. 手動 StringBuilder(基本型別陣列)

int[] nums = {1,2,3,4,5};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < nums.length; i++) {
    if (i > 0) sb.append(",");
    sb.append(nums[i]); // 自動裝箱/調用 String.valueOf
}
String result = sb.toString();

三、效能與選型建議

場景推薦方式理由
JDK 8+ 一般集合/陣列String.join / Collectors.joining標準庫、可讀性高、效能好
需前綴後綴、複雜轉換Stream Collectors.joining(delim, prefix, suffix)靈活、鏈式調用
JDK 7 或 Android 老版本StringBuilder 手動 / TextUtils.join (Android)兼容性
超大集合 (百萬+)並行流 .parallelStream() + Collectors.joining多核加速
基本型別陣列避免裝箱手動 StringBuilder + 專用 Appendable 邏輯減少 GC

四、總結

現代 Java (8+) 開發,首選 String.join 與 Stream Collectors.joining,代碼簡潔、標準化、效能可靠。手動 StringBuilder 僅用於極致效能調優或舊版本兼容。理解 CharSequence、StringJoiner、Collector 等底層機制,能在代碼審查中做出專業判斷。

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