String.join-高效字符串拼接
- 前言
- 一、基础用法:拼接数组或集合元素(仅分隔符)
- 语法
- 示例 1:拼接字符串数组
- 示例 2:拼接集合元素
- 注意事项
- 二、进阶用法:结合 Stream API 处理复杂场景
- 示例 1:添加前缀和后缀(如数组格式)
- 示例 2:处理空集合的默认值
- 三、特殊场景:处理非字符串类型
- 四、对比传统拼接方式
- 传统方式(`StringBuilder`)
- `String.join()` 优势
- 五、注意事项
- 总结:常用场景
前言
String.join()
是 Java 8 引入的静态方法,用于将多个字符串通过指定分隔符合并成一个字符串。它简化了传统的字符串拼接逻辑,尤其适合处理集合或数组中的元素拼接。
一、基础用法:拼接数组或集合元素(仅分隔符)
语法
String.join(CharSequence delimiter, CharSequence... elements)
-
delimiter
:分隔符(如,
、-
等)。 -
elements
:待拼接的字符串数组或可变参数。
示例 1:拼接字符串数组
String[] fruits = {"Apple", "Banana", "Cherry"};
String result = String.join(", ", fruits);
System.out.println(result); // 输出:Apple, Banana, Cherry
示例 2:拼接集合元素
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
String result = String.join(" -> ", names);
System.out.println(result); // 输出:Alice -> Bob -> Charlie
注意事项
-
若元素为
null
,会抛出NullPointerException
。 -
若元素为空字符串(
""
),会保留空值(不同于过滤操作):
String[] arr = {"A", "", "B"};
String result = String.join("-", arr); // 输出:A--B
二、进阶用法:结合 Stream API 处理复杂场景
通过 Stream
的 collect(Collectors.joining())
可添加前缀和后缀,语法如下:
.collect(Collectors.joining(delimiter, prefix, suffix))
-
delimiter
:元素间的分隔符(必填)。 -
prefix
:结果前缀(可选)。 -
suffix
:结果后缀(可选)。
示例 1:添加前缀和后缀(如数组格式)
List<String> list = Arrays.asList("One", "Two", "Three");
String result = list.stream()
.collect(Collectors.joining(", ", "[", "]"));
System.out.println(result); // 输出:[One, Two, Three]
示例 2:处理空集合的默认值
List<String> emptyList = Collections.emptyList();
String result = emptyList.stream()
.collect(Collectors.joining(", ", "Items: [", "]"));
System.out.println(result); // 输出:Items: [](空集合时保留前缀和后缀)
三、特殊场景:处理非字符串类型
若元素为非字符串(如数字、对象),需先转为字符串再拼接:
Integer[] numbers = {1, 2, 3, 4, 5};
String result = Arrays.stream(numbers)
.map(String::valueOf) // 转换为字符串
.collect(Collectors.joining(" | "));
System.out.println(result); // 输出:1 | 2 | 3 | 4 | 5
四、对比传统拼接方式
传统方式(StringBuilder
)
StringBuilder sb = new StringBuilder();
for (String fruit : fruits) {
if (sb.length() > 0) {
sb.append(", "); // 手动添加分隔符
}
sb.append(fruit);
}
String result = sb.toString(); // 输出:Apple, Banana, Cherry
String.join()
优势
-
代码更简洁,无需手动处理分隔符逻辑。
-
性能与
StringBuilder
相当,适合大多数场景。
五、注意事项
- 空元素处理:
- 元素为
null
会报错,需提前过滤:
List<String> list = Arrays.asList("A", null, "B");
String result = list.stream()
.filter(Objects::nonNull) // 过滤null
.collect(Collectors.joining(", ")); // 输出:A, B
- 分隔符为空:
String result = String.join("", "Hello", "World"); // 输出:HelloWorld
- 与
StringJoiner
的区别:
-
String.join()
是静态方法,底层依赖StringJoiner
实现。 -
StringJoiner
更灵活,可中途修改分隔符、前缀、后缀(如setDelimiter()
)。
总结:常用场景
需求描述 | 代码示例 | 输出结果 |
---|---|---|
简单拼接(逗号分隔) | String.join(", ", "A", "B", "C") | A, B, C |
带前缀后缀 | Collectors.joining(", ", "List: [", "]") | List: [A, B, C] |
处理数字集合 | Arrays.stream(numbers).mapToObj(String::valueOf).collect(Collectors.joining("-")) | 1-2-3-4-5 |
空集合处理 | Collectors.joining(", ", "Empty: [", "]") (空集合) | Empty: [] |
合理使用 String.join()
可以大幅简化字符串拼接逻辑,尤其在处理集合或需要统一分隔符的场景中效率显著。
若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ