StringJoiner拼接分隔符

wen java案例 2

本文目录导读:

StringJoiner拼接分隔符

  1. 核心构造方法
  2. 常用方法
  3. 快速示例
  4. 与 Stream API 结合使用(Java 8+)
  5. 手动实现简易版(理解原理)
  6. 性能与注意事项

在 Java 中,StringJoinerjava.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) 一致)
  • 不要忘记 toStringStringJoinertoString() 方法在每次调用时重新构建字符串,大量调用可能影响性能
场景 推荐用法
简单拼接分隔符字符串 StringJoinerString.join()
需要前缀/后缀 StringJoiner(构造时指定)
Stream 流处理 Collectors.joining()
需要处理空集合 StringJoiner.setEmptyValue()
需要合并多个 Joiner StringJoiner.merge()

在实际开发中,如果没有特殊需求(如前缀后缀、空值处理),简单的字符串拼接也可以直接用:

String result = String.join(", ", "A", "B", "C"); // A, B, C

抱歉,评论功能暂时关闭!