StringJoiner 通过自动处理分隔符、忽略 null 值、支持前缀后缀及合并操作,提升字符串拼接的安全性与可读性;空实例 toString() 返回前缀+后缀,需手动判断 length() 是否为 0 来返回空字符串。

Java 中用 StringJoiner 拼接带分隔符的字符串,核心是避免手动处理首尾分隔符、空值或重复拼接逻辑,让代码更清晰、安全、可读性高。
创建 StringJoiner 并指定分隔符(必填)
构造时必须传入分隔符,否则无法生效。支持可选的前缀和后缀(比如括号包裹):
-
new StringJoiner(",")→ 生成"a,b,c" -
new StringJoiner(" | ", "[", "]")→ 生成"[a | b | c]"
用 add() 逐个添加非 null 字符串(自动跳过 null)
add() 方法会忽略 null 值,不抛异常也不拼入字面量 "null",省去手动判空:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
joiner.add("apple"); joiner.add(null); joiner.add("banana");→ 结果为"apple,banana" - 若需保留
null的语义(如显示为"(null)"),应提前转换:joiner.add(s == null ? "(null)" : s)
合并多个 StringJoiner 或 Collection(复用已有数据)
用 merge() 可把另一个 StringJoiner 的内容追加进来(跳过其前缀/后缀,只取中间元素);toString() 前也可直接传 Collection 配合 Collectors.joining()(Stream 场景更常见):
立即学习“Java免费学习笔记(深入)”;
-
joiner1.merge(joiner2)→ 把joiner2的所有元素加入joiner1,保持统一分隔符 -
list.stream().collect(Collectors.joining(", ", "{", "}"))底层就基于StringJoiner
注意空 joiner 的 toString() 返回前缀+后缀(不是空字符串)
如果一个 StringJoiner 没有调用过 add(),toString() 会返回纯前缀+后缀(如 "[]"),而不是空字符串 "":
- 需要“空时返回空字符串”,可加判断:
joiner.length() == 0 ? "" : joiner.toString() -
length()返回的是最终字符串长度(含前缀后缀),适合做空判断

















