最推荐方式是:字符串数组用String.join(),任意类型数组用Arrays.stream()+Collectors.joining();前者简洁高效,后者通用灵活,可定制格式;避免使用Arrays.toString()或arr.toString()生成业务字符串。

Java 中将数组转为字符串并指定分隔符,最常用、最推荐的方式是使用 String.join()(适用于字符串数组)或 Arrays.toString() 配合字符串替换(通用但不优雅),而真正灵活且适用于任意类型数组的是 Arrays.stream() + Collectors.joining()。
字符串数组:直接用 String.join()
如果数组元素本身就是 String 类型,String.join() 是最简洁、高效的方法,无需额外依赖或流操作。
- 语法:
String.join(分隔符, 字符串数组) - 它会自动跳过
null元素(不会报错,但会把null当作字符串 "null" 处理) - 示例:
String[] arr = {"a", "b", "c"};
String result = String.join("-", arr); // 输出 "a-b-c"
任意类型数组:用 Arrays.stream() + Collectors.joining()
对 int[]、Integer[]、Person[] 等非字符串数组,需先转成字符串流,再拼接。这是最通用、可定制性强的方式。
- 基本类型数组(如
int[])需先用Arrays.stream(arr).mapToObj(String::valueOf) - 引用类型数组(如
String[]、Integer[])可用Arrays.stream(arr).map(Object::toString) - 支持自定义格式,比如加括号、过滤 null、转换大小写等
- 示例:
int[] nums = {1, 2, 3};
String s = Arrays.stream(nums)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",")); // "1,2,3"
注意 toString() 和 Arrays.toString() 的区别
Arrays.toString(arr) 返回类似 [a, b, c] 的格式,含方括号和空格,不是纯分隔符字符串;直接调用数组的 toString() 得到的是哈希码(如 [Ljava.lang.String;@1b6d3586),完全不可读。
立即学习“Java免费学习笔记(深入)”;
- 不要用
arr.toString()—— 没有意义 - 避免用
Arrays.toString(arr).replaceAll("[\[\] ]", "")去掉括号空格 —— 容易出错(比如元素本身含空格或括号) - 若只是临时调试打印,
Arrays.toString()合适;若要生成业务用字符串,务必用join或流式方案
第三方库补充(如 Apache Commons / Guava)
项目已引入 commons-lang3 时,可用 StringUtils.join(arr, "-"),对 null 更友好(可设默认值);Guava 的 Joiner.on("-").join(arr) 也类似。但 JDK 8+ 原生方案已足够,不建议仅为这个功能引入依赖。


















