stringjoiner适用于带分隔符、前缀后缀的动态字符串拼接,如集合转字符串、sql in子句、日志模板等;内部基于stringbuilder,智能管理分隔符插入时机,空集合可设默认值,语义清晰且边界安全。

StringJoiner 主要用于需要带分隔符、前缀或后缀的动态字符串拼接场景,尤其适合集合遍历、日志格式化、SQL 参数构造、配置项生成等明确要求“干净分隔”的场合。
典型使用场景
• 集合转带分隔符字符串:比如把 List
• 动态构建 SQL IN 子句:如生成 "IN (?, ?, ?)",元素数量不确定,且必须套括号、逗号分隔。
• 日志或消息模板填充:例如拼出 "User[id=123, name=Tom, status=ACTIVE]",各字段用 ", " 分隔,整体用花括号包裹。
• 空集合有默认表现:通过 setEmptyValue() 可设为 "(empty)" 或 "[]”,避免返回空串后还要额外判空。
底层拼接机制
StringJoiner 内部持有一个 StringBuilder 实例(字段名 value),所有 add() 操作最终都委托给这个 StringBuilder 的 append() 方法执行。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
它不是简单地每次 add 都拼一次,而是通过状态管理来控制分隔符插入时机:
- 首次 add 时,直接追加元素,不加 delimiter;
- 后续 add 时,先 append(delimiter),再 append(新元素);
- toString() 时,自动在开头加 prefix、结尾加 suffix;
- 若从未 add 过任何元素,就直接返回 emptyValue(默认是 prefix + suffix)。
整个过程没有字符串对象反复创建,也没有数组拷贝开销——和 StringBuilder 一样,依赖 char[] 数组扩容策略(容量不足时约翻倍),属于典型的摊销 O(1) 追加操作。
和 StringBuilder 手动拼接的关键区别
• 语义清晰:分隔逻辑内聚在类里,代码意图一目了然;
• 边界安全:空集合、单元素、多元素统一处理,不会漏掉或多余分隔符;
• 可复用可重置:同一个 StringJoiner 实例可以 clear 后重复使用(调 setEmptyValue 或新建);
• null 敏感:add(null) 直接抛 NPE,强制你提前做 null 处理,避免静默错误。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










