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"