StringJoiner源码学习

时间:2022-07-24
本文章向大家介绍StringJoiner源码学习,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在阅读源码的时候发现了一个类StringJoiner,因为之前也没用过。感觉应该是字符串拼接的工具类。

看到其中有几个变量。主要是前后缀和空字符串等。

 public StringJoiner(CharSequence delimiter,
                        CharSequence prefix,
                        CharSequence suffix) {
        Objects.requireNonNull(prefix, "The prefix must not be null");
        Objects.requireNonNull(delimiter, "The delimiter must not be null");
        Objects.requireNonNull(suffix, "The suffix must not be null");
        // 设置前缀
        this.prefix = prefix.toString();
        //设置切割符
        this.delimiter = delimiter.toString();
        //设置后缀
        this.suffix = suffix.toString();
        //设置空value
        this.emptyValue = this.prefix + this.suffix;
    }

在添加的方法中

    public StringJoiner add(CharSequence newElement) {
        prepareBuilder().append(newElement);
        return this;
    }
    //创建一个stringBuilder
    private StringBuilder prepareBuilder() {
        if (value != null) {
            //追加到在value之后添加一个分隔符
            value.append(delimiter);
        } else {
            //创建value,然后添加一个前缀
            value = new StringBuilder().append(prefix);
        }
        return value;
    }

在toString()方法中:

    public String toString() {
        if (value == null) {
            return emptyValue;
        } else {
            if (suffix.equals("")) {
                //如果后缀为空,那么直接返回
                return value.toString();
            } else {
                int initialLength = value.length();
                //添加一个后缀
                String result = value.append(suffix).toString();
                // reset value to pre-append initialLength
                value.setLength(initialLength);
                return result;
            }
        }
    }

代码看到这里,基本已经没了。其中的方法merge()应该是定制的工具。那么我们本地测试一下代码看看这个效果。我们看到add方法接受的参数是CharSequence,我们通过向上查阅,发现这个CharSequence是String的一个接口。也就是说与String相关的都可以做为参数传递进去。包括StringBuilder等。

public class TestStringJoin {
    public static void main(String[] args) {
        StringJoiner stringJoiner=new StringJoiner(",","1 "," 2");
        stringJoiner.add("程序员记事本").add("test");
        System.out.println(stringJoiner.toString());
    }
}

有了此工具,您还在为类似url的参数拼接感到烦恼吗?