StringJoiner 是 Java 8 提供的带分隔符、前缀和后缀的字符串拼接工具,支持链式 add()、merge() 合并及空值安全处理,toString() 返回含前缀后缀的结果,未添加元素时返回前缀+后缀。

StringJoiner 是 Java 8 引入的轻量级字符串拼接工具,专为构建带分隔符、前缀和后缀的字符串而设计,比手动用 StringBuilder 拼接更简洁、语义更清晰。
创建带前缀、后缀和分隔符的 StringJoiner
构造时直接传入三个参数:分隔符、前缀、后缀。这是最核心的用法:
- 分隔符:插入在每两个元素之间(不加在开头或结尾)
- 前缀:整个结果字符串最前面的内容(如
"[") - 后缀:整个结果字符串最后面的内容(如
"]")
示例:
StringJoiner joiner = new StringJoiner(",", "[", "]");joiner.add("apple").add("banana").add("cherry");
// 结果:"[apple,banana,cherry]"
动态添加元素与空值处理
add() 方法支持链式调用,返回自身;若添加 null,会自动转为字符串 "null"(不会抛异常):
立即学习“Java免费学习笔记(深入)”;
- 推荐提前过滤或转换
null,避免意外输出"null" - 可结合
Objects.toString(obj, "")实现空安全添加
示例:
StringJoiner joiner = new StringJoiner(" | ", "«", "»");joiner.add(Objects.toString(name, ""))
.add(Objects.toString(age, ""))
.add(Objects.toString(city, ""));
// name=null, age=25, city="Beijing" → «|25|Beijing»
合并多个 StringJoiner
用 merge() 可将另一个 StringJoiner 的内容(不含其前缀/后缀)追加到当前对象中,分隔符自动生效:
- 被合并的
StringJoiner必须使用相同分隔符,否则行为未定义(建议保持一致) - 前缀后缀仅保留在最终结果上,中间合并部分不重复添加
示例:
StringJoiner j1 = new StringJoiner("-", "(", ")");j1.add("a").add("b"); // "(a-b)"
StringJoiner j2 = new StringJoiner("-", "", "");
j2.add("c").add("d"); // "c-d"
j1.merge(j2); // "(a-b-c-d)"
获取结果与空状态判断
调用 toString() 得到最终字符串;若从未调用 add(),则返回前缀+后缀(中间无内容):
- 例如
new StringJoiner(",", "{", "}").toString()→"{}" - 可用
length() == 0判断是否为空(注意:它返回的是最终字符串长度,含前缀后缀) - 若需区分“无元素”和“元素为空字符串”,应单独记录添加次数
不复杂但容易忽略。



















