前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >StringJoiner源码学习

StringJoiner源码学习

作者头像
写一点笔记
发布2020-09-01 10:48:56
3710
发布2020-09-01 10:48:56
举报
文章被收录于专栏:程序员备忘录

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

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

代码语言:javascript
复制
 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;
    }

在添加的方法中

代码语言:javascript
复制
    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()方法中:

代码语言:javascript
复制
    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等。

代码语言:javascript
复制
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的参数拼接感到烦恼吗?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员备忘录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档