Java String join()

String.join() 方法用來將多個字串連接成一個字串,中間用指定的分隔符號隔開。

語法

String.join(CharSequence delimiter, CharSequence... elements)
String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements)

基本範例

// 連接多個字串
String result = String.join(", ", "apple", "banana", "cherry");
System.out.println(result);  // "apple, banana, cherry"

// 連接陣列
String[] fruits = {"apple", "banana", "cherry"};
String result2 = String.join(" - ", fruits);
System.out.println(result2);  // "apple - banana - cherry"

// 連接 List
List<String> list = Arrays.asList("a", "b", "c");
String result3 = String.join("", list);
System.out.println(result3);  // "abc"

各種分隔符號

String[] words = {"Hello", "World", "Java"};

System.out.println(String.join(" ", words));    // "Hello World Java"
System.out.println(String.join(",", words));    // "Hello,World,Java"
System.out.println(String.join(", ", words));   // "Hello, World, Java"
System.out.println(String.join("\n", words));   // 每個單字一行
System.out.println(String.join("", words));     // "HelloWorldJava"
System.out.println(String.join(" | ", words));  // "Hello | World | Java"

實際應用

建立 CSV 行

String[] data = {"Alice", "25", "Engineer"};
String csv = String.join(",", data);
System.out.println(csv);  // "Alice,25,Engineer"

建立 URL 路徑

String[] pathParts = {"api", "v1", "users", "123"};
String path = "/" + String.join("/", pathParts);
System.out.println(path);  // "/api/v1/users/123"

建立 SQL IN 子句

List<String> ids = Arrays.asList("1", "2", "3", "4");
String inClause = "(" + String.join(", ", ids) + ")";
System.out.println(inClause);  // "(1, 2, 3, 4)"

建立 HTML 清單

String[] items = {"項目一", "項目二", "項目三"};
String html = "<li>" + String.join("</li><li>", items) + "</li>";
System.out.println(html);
// "<li>項目一</li><li>項目二</li><li>項目三</li>"

join vs 其他連接方式

String[] arr = {"a", "b", "c"};

// 方式一:String.join()(推薦)
String s1 = String.join(",", arr);

// 方式二:StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
    if (i > 0) sb.append(",");
    sb.append(arr[i]);
}
String s2 = sb.toString();

// 方式三:Stream(Java 8+)
String s3 = Arrays.stream(arr).collect(Collectors.joining(","));

StringJoiner

更靈活的連接方式,可以設定前綴和後綴:

import java.util.StringJoiner;

// 基本使用
StringJoiner sj = new StringJoiner(", ");
sj.add("apple");
sj.add("banana");
sj.add("cherry");
System.out.println(sj.toString());  // "apple, banana, cherry"

// 設定前綴和後綴
StringJoiner sj2 = new StringJoiner(", ", "[", "]");
sj2.add("a");
sj2.add("b");
sj2.add("c");
System.out.println(sj2.toString());  // "[a, b, c]"

// 設定空值時的預設值
StringJoiner sj3 = new StringJoiner(", ", "[", "]");
sj3.setEmptyValue("empty");
System.out.println(sj3.toString());  // "empty"

Collectors.joining()

在 Stream 中連接字串:

import java.util.stream.Collectors;

List<String> list = Arrays.asList("a", "b", "c");

// 簡單連接
String s1 = list.stream().collect(Collectors.joining());
System.out.println(s1);  // "abc"

// 使用分隔符號
String s2 = list.stream().collect(Collectors.joining(", "));
System.out.println(s2);  // "a, b, c"

// 使用分隔符號、前綴、後綴
String s3 = list.stream().collect(Collectors.joining(", ", "[", "]"));
System.out.println(s3);  // "[a, b, c]"

split() 與 join() 互為相反

// split:字串 → 陣列
String s = "a,b,c";
String[] arr = s.split(",");  // ["a", "b", "c"]

// join:陣列 → 字串
String back = String.join(",", arr);  // "a,b,c"