博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
StringJoiner源码学习
阅读量:4210 次
发布时间:2019-05-26

本文共 2078 字,大约阅读时间需要 6 分钟。

在阅读源码的时候发现了一个类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的参数拼接感到烦恼吗?

转载地址:http://jqkmi.baihongyu.com/

你可能感兴趣的文章
[hive]优化策略
查看>>
c++14现代内存管理
查看>>
右值引用,move语义和完美转发
查看>>
c++使用宏检测类是否包含某个函数或者变量属性
查看>>
CSS之Multi-columns的column-gap和column-rule
查看>>
CSS之Multi-columns的跨列
查看>>
CSS之浮动(一)
查看>>
CSS之浮动(二)
查看>>
记腾讯互娱网站布局(1)
查看>>
记腾讯互娱网站布局(2)
查看>>
记腾讯互娱网站布局(3)
查看>>
大小不固定的图片和多行文字的垂直水平居中
查看>>
display:table-cell的集中应用
查看>>
display:table-cell自适应布局下连续单词字符换行
查看>>
0115 springboot template方式操作mongodb
查看>>
0116 spring的webFlux
查看>>
解决 Asp.net 中,url传参乱码 方法之一:(UrlDecode)
查看>>
pdf的转换网址:
查看>>
c++设计模式之三~抽象工厂模式
查看>>
c++设计模式之单例模式
查看>>