Java StringJoiner清空处理

在 Java 中,StringJoiner 类没有直接提供 clear() 方法来清空已添加的元素。不过,你可以通过以下几种方式实现类似的 “清空” 效果:

方法 1:创建新的 StringJoiner 实例

最直接的方式是丢弃当前实例,创建一个新的 StringJoiner

StringJoiner joiner = new StringJoiner(", ");
joiner.add("a").add("b").add("c");  // 当前结果:"a, b, c"

// 清空:创建新实例
joiner = new StringJoiner(", ");

方法 2:重置 value 属性(反射方式)

通过反射直接修改 StringJoiner 的内部 value 属性(不推荐生产环境使用):

import java.lang.reflect.Field;

public static void clearStringJoiner(StringJoiner joiner) throws NoSuchFieldException, IllegalAccessException {
    Field valueField = StringJoiner.class.getDeclaredField("value");
    valueField.setAccessible(true);
    valueField.set(joiner, null);
}

// 使用示例
StringJoiner joiner = new StringJoiner(", ");
joiner.add("a").add("b");
clearStringJoiner(joiner);  // 清空

方法 3:自定义可重置的 StringJoiner 包装类

封装 StringJoiner 并添加重置方法:

public class ResettableStringJoiner {
    private StringJoiner joiner;
    private final String delimiter;
    private final String prefix;
    private final String suffix;

    public ResettableStringJoiner(CharSequence delimiter) {
        this(delimiter, "", "");
    }

    public ResettableStringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) {
        this.delimiter = delimiter.toString();
        this.prefix = prefix.toString();
        this.suffix = suffix.toString();
        this.joiner = new StringJoiner(delimiter, prefix, suffix);
    }

    public ResettableStringJoiner add(CharSequence newElement) {
        joiner.add(newElement);
        return this;
    }

    public void reset() {
        joiner = new StringJoiner(delimiter, prefix, suffix);
    }

    @Override
    public String toString() {
        return joiner.toString();
    }
}

// 使用示例
ResettableStringJoiner rjoiner = new ResettableStringJoiner(", ");
rjoiner.add("a").add("b");  // "a, b"
rjoiner.reset();            // 清空

推荐方案

方法 1 是最简单、最安全的方式,适用于大多数场景。
如果需要频繁重置,方法 3 的自定义包装类能提供更好的封装性。
反射方式(方法 2)仅建议在测试或非关键代码中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CnLg.NJ

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值