Java---StringJoiner 的使用
在Java中,StringJoiner
是 专门用于高效拼接多个字符串,支持自定义分隔符、前缀和后缀。它简化了传统 StringBuilder
或字符串拼接操作中需要手动处理分隔符的复杂性,尤其在处理集合或流数据时非常实用。它简化了集合元素拼接、日志格式化等场景的代码。
StringJoiner 的核心功能
- 分隔符(Delimiter):元素之间的分隔符(如逗号、空格)。
- 前缀(Prefix):拼接结果的开头部分(如
[
)。 - 后缀(Suffix):拼接结果的结尾部分(如
]
)。 - 空值处理:当没有添加元素时,可以设置默认输出。
构造函数
提供两种构造函数:用法大同小异,披一层外衣而已;
方法 | 说明 |
| 只指定分隔符 |
| 指定分隔符、前缀和后缀 |
示例:
// 用逗号和空格分隔元素,无前缀/后缀
StringJoiner joiner1 = new StringJoiner(", ");// 用逗号分隔,前缀为 "[", 后缀为 "]"
StringJoiner joiner2 = new StringJoiner(", ", "[", "]");
常用方法
方法 | 说明 |
| 添加元素 |
| 合并另一个 |
| 变回字符串 |
| 返回当前长度(包含前缀和后缀) |
| 设置没有元素时的默认输出 |
使用示例
1. 基础拼接
StringJoiner joiner = new StringJoiner(", ", "[", "]");
joiner.add("Apple");
joiner.add("Banana");
joiner.add("Cherry");System.out.println(joiner.toString()); // 输出: [Apple, Banana, Cherry]StringJoiner sj = new StringJoiner(", ", "Names: ", " (end)");
sj.add("Alice");
sj.add("Bob");
sj.add("Charlie");System.out.println(sj); // 输出: Names: Alice, Bob, Charlie (end)
2. 处理空值
StringJoiner sj = new StringJoiner("|");
sj.setEmptyValue("(No data)"); // 未添加元素时的默认值System.out.println(sj); // 输出: (No data)sj.add("Java");
System.out.println(sj); // 输出: Java
3. 合并多个 StringJoiner
StringJoiner joiner1 = new StringJoiner(", ", "[", "]");
joiner1.add("A").add("B");StringJoiner joiner2 = new StringJoiner("-", "{", "}");
joiner2.add("1").add("2");joiner1.merge(joiner2);
System.out.println(joiner1.toString()); // 输出: [A, B, 1-2]
4. 结合 Stream API 使用
List<String> cities = Arrays.asList("Beijing", "Shanghai", "Guangzhou");
String result = cities.stream().filter(s -> s.length() > 7).collect(Collectors.joining("; ", "{ ", " }"));System.out.println(result); // 输出: { Beijing; Shanghai; Guangzhou }
Collectors.joining()
是 Java 8 Stream API 提供的收集器,专为高效拼接流中元素设计。它底层使用 StringJoiner
,支持自动添加分隔符、前缀和后缀,特别适合集合或流数据的字符串拼接场景。
注意事项
- 空元素处理:
add(null)
会拼接"null"
字符串。 - 性能:底层使用
StringBuilder
,性能高效。 - 线程安全:非线程安全(类似
StringBuilder
)。 - 空值处理:默认空集合会显示前缀+后缀,可用
setEmptyValue
覆盖 - 元素中的分隔符:不会自动转义包含的分隔符字符
- 性能:适合已知元素数量的场景,超大数量数据建议用 StringBuilder
总结
StringJoiner
是处理复杂字符串拼接的理想工具,尤其适合以下场景:
- 需要分隔符、前缀和后缀的格式化输出。
- 结合集合或流(如
Collectors.joining()
)使用。 - 避免手动处理分隔符逻辑(如避免末尾多余分隔符)。
通过灵活使用 StringJoiner
,可以大幅提升代码可读性和简洁性。