使用 String.join() (Java 8+ 推荐)
这是最现代、最简洁、最推荐的方法,它专门用于将一个数组或集合中的元素用指定的分隔符连接成一个字符串。

语法:
String.join(CharSequence delimiter, String[] elements)
示例代码:
public class StringArrayToString {
public static void main(String[] args) {
String[] fruits = {"Apple", "Banana", "Cherry", "Date"};
// 使用逗号和空格作为分隔符
String result1 = String.join(", ", fruits);
System.out.println("使用逗号和空格分隔: " + result1);
// 输出: 使用逗号和空格分隔: Apple, Banana, Cherry, Date
// 使用竖线作为分隔符
String result2 = String.join("|", fruits);
System.out.println("使用竖线分隔: " + result2);
// 输出: 使用竖线分隔: Apple|Banana|Cherry|Date
// 处理空数组
String[] emptyArray = {};
String result3 = String.join(", ", emptyArray);
System.out.println("空数组的结果: '" + result3 + "'");
// 输出: 空数组的结果: ''
}
}
优点:
- 代码简洁:一行代码即可完成,可读性高。
- 功能强大:可以灵活指定任意分隔符。
- 性能良好:内部实现高效。
- 安全:能正确处理
null元素(会抛出NullPointerException,这是合理的行为)。
缺点:

- 需要 Java 8 或更高版本。
使用 String.join() 和 Arrays.stream() (Java 8+)
如果你的数组可能包含 null 元素,并且你希望将 null 替换为某个默认值(例如空字符串 "null"),可以使用 Stream 的 map 操作。
示例代码:
import java.util.Arrays;
public class StringArrayWithNullToString {
public static void main(String[] args) {
String[] arrayWithNull = {"Hello", null, "World", null};
// 将 null 替换为 "NULL" 字符串
String result = String.join(", ", Arrays.stream(arrayWithNull)
.map(s -> s == null ? "NULL" : s)
.toArray(String[]::new));
System.out.println("处理 null 元素后的字符串: " + result);
// 输出: 处理 null 元素后的字符串: Hello, NULL, World, NULL
}
}
优点:
- 非常灵活,可以处理复杂的转换逻辑。
- 仍然是 Java 8+ 的特性。
缺点:

- 比直接
String.join()稍显复杂。
使用 String.join() 和 Collectors.joining (Java 8+ Stream API)
这是 Stream API 的另一种写法,功能与 String.join() 类似,但风格上更函数式,它通常在流式处理管道中使用。
示例代码:
import java.util.Arrays;
import java.util.stream.Collectors;
public class StringArrayStreamJoining {
public static void main(String[] args) {
String[] languages = {"Java", "Python", "C++", "JavaScript"};
String result = Arrays.stream(languages)
.collect(Collectors.joining(" | "));
System.out.println("使用 Stream API 连接: " + result);
// 输出: 使用 Stream API 连接: Java | Python | C++ | JavaScript
}
}
优点:
- 风格统一,如果代码中已经大量使用了 Stream API,这种方式会很自然。
- 功能与
String.join()基本一致。
缺点:
- 对于简单的数组连接,
String.join()更直接。
使用 StringBuilder (经典方法)
在不使用 Java 8 的情况下,StringBuilder 是最高效、最经典的手动拼接方式,通过循环遍历数组,将每个元素追加到 StringBuilder 对象中。
示例代码:
public class StringArrayToStringBuilder {
public static void main(String[] args) {
String[] parts = {"This", "is", "a", "test"};
StringBuilder sb = new StringBuilder();
// 遍历数组
for (String part : parts) {
// 如果不是第一个元素,先添加分隔符
if (sb.length() > 0) {
sb.append(" ");
}
sb.append(part);
}
String result = sb.toString();
System.out.println("使用 StringBuilder 连接: " + result);
// 输出: 使用 StringBuilder 连接: This is a test
}
}
优点:
- 性能极高:
StringBuilder在拼接字符串时避免了创建大量中间字符串对象,是性能最好的方法之一。 - 兼容所有 Java 版本:从 Java 1.5 就开始支持。
- 灵活控制:可以轻松地在循环内添加复杂的逻辑。
缺点:
- 代码冗长:需要手动处理循环、分隔符和空数组的情况,代码量比
String.join()多。
使用 Arrays.toString() (不推荐用于此目的)
注意:这个方法不适用于将数组元素连接成一个字符串,它的目的是生成一个数组的字符串表示形式,包含方括号 []。
示例代码(演示错误用法):
import java.util.Arrays;
public class StringArrayToStringWrong {
public static void main(String[] args) {
String[] items = {"one", "two", "three"};
// 错误!这会得到 "[one, two, three]"
String wrongResult = Arrays.toString(items);
System.out.println("错误的结果: " + wrongResult);
// 输出: 错误的结果: [one, two, three]
}
}
除非你确实需要得到一个带有方括号的数组描述字符串,否则绝对不要用 Arrays.toString() 来拼接数组元素。
总结与选择建议
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
String.join() |
最简洁、最推荐、可读性高、功能明确 | 需要 Java 8+ | 所有现代 Java 项目(Java 8+)的首选。 |
StringBuilder |
性能最好、兼容性广 | 代码冗长,需手动处理细节 | 在性能要求极高的场景,或者在不支持 Java 8 的旧项目中。 |
Arrays.toString() |
一行代码完成 | 结果不符合需求(带方括号) | 仅当你需要打印数组的调试信息时使用,不要用于拼接。 |
Stream API |
灵活,可处理复杂逻辑 | 对于简单任务略显复杂 | 当需要对数组元素进行额外处理(如过滤、映射)后再拼接时。 |
最终建议:
- 如果你使用的是 Java 8 或更高版本,请毫不犹豫地选择
String.join()。 它是解决这个问题的最佳方式。 - 如果你在处理一个性能极其敏感的循环,或者你使用的 Java 版本低于 8,那么使用
StringBuilder是一个可靠且高效的选择。
