本文目录导读:

在 Java 中,StringJoiner 是 java.util 包下的一个实用工具类,专门用于构造以分隔符分隔的字符序列,并且可以可选地添加前缀和后缀。
它本质上是对 StringBuilder 在拼接场景下的封装,目的是让代码更简洁、可读性更高。
核心构造方法
// 方式1:只指定分隔符
StringJoiner sj1 = new StringJoiner(", ");
// 方式2:指定分隔符、前缀、后缀
StringJoiner sj2 = new StringJoiner(", ", "[", "]");
常用方法
| 方法 | 作用 |
|---|---|
add(CharSequence element) |
添加一个元素,自动在元素之间插入分隔符 |
merge(StringJoiner other) |
合并另一个 StringJoiner 的内容 |
setEmptyValue(CharSequence emptyValue) |
当没有添加任何元素时,返回该值 |
toString() |
返回拼接后的完整字符串 |
快速示例
示例1:基本用法(无前缀后缀)
StringJoiner sj = new StringJoiner(", ");
sj.add("Apple");
sj.add("Banana");
sj.add("Cherry");
String result = sj.toString();
System.out.println(result); // 输出:Apple, Banana, Cherry
示例2:带前缀和后缀
StringJoiner sj = new StringJoiner(" | ", "[", "]");
sj.add("A");
sj.add("B");
sj.add("C");
System.out.println(sj); // 输出:[A | B | C]
示例3:处理空值场景
StringJoiner sj = new StringJoiner(", ");
sj.setEmptyValue("(empty)");
System.out.println(sj); // 输出:(empty)
sj.add("Hello");
System.out.println(sj); // 输出:Hello
与 Stream API 结合使用(Java 8+)
在 Stream 流式处理中,你通常不需要直接实例化 StringJoiner,因为 Collectors.joining() 底层已经封装了它。
List<String> list = Arrays.asList("Java", "Python", "Go");
// 等价于底层使用 StringJoiner
String result = list.stream()
.collect(Collectors.joining(", "));
System.out.println(result); // 输出:Java, Python, Go
如果需要前缀后缀:
String result2 = list.stream()
.collect(Collectors.joining(", ", "[", "]"));
System.out.println(result2); // 输出:[Java, Python, Go]
手动实现简易版(理解原理)
public class SimpleJoiner {
public static void main(String[] args) {
String delimiter = "-";
StringBuilder sb = new StringBuilder();
String[] items = {"A", "B", "C"};
for (int i = 0; i < items.length; i++) {
if (i > 0) sb.append(delimiter); // 在非第一个元素前加分隔符
sb.append(items[i]);
}
System.out.println(sb); // A-B-C
}
}
性能与注意事项
- 线程不安全:
StringJoiner非线程安全,多线程场景需要外部同步 - 底层实现:内部使用
StringBuilder,拼接效率与StringBuilder一致 - null 处理:
add()方法传入null时会添加字符串"null"(与StringBuilder.append(null)一致) - 不要忘记 toString:
StringJoiner的toString()方法在每次调用时重新构建字符串,大量调用可能影响性能
| 场景 | 推荐用法 |
|---|---|
| 简单拼接分隔符字符串 | StringJoiner 或 String.join() |
| 需要前缀/后缀 | StringJoiner(构造时指定) |
| Stream 流处理 | Collectors.joining() |
| 需要处理空集合 | StringJoiner.setEmptyValue() |
| 需要合并多个 Joiner | StringJoiner.merge() |
在实际开发中,如果没有特殊需求(如前缀后缀、空值处理),简单的字符串拼接也可以直接用:
String result = String.join(", ", "A", "B", "C"); // A, B, C
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播