StringJoiner有如下两个构造函数。
StringJoiner(CharSequence delimiter)
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
e.g.有两个字符串为“hello”和“world”,想连接这些字符串为[hello,world],则可使用第二个构造函数,传参:前缀、后缀和定界符
调用add方法,源代码如下
public StringJoiner add(CharSequence newElement) { prepareBuilder().append(newElement); return this; } private StringBuilder prepareBuilder() { //此处value为一个StringBilder实例,是StringJoiner的一个成员 if (value != null) { value.append(delimiter); } else { value = new StringBuilder().append(prefix); } return value; }
第一次add会走else部分,新建一个StringBuilder对象并添加prefix元素(此处在调用构造器的时候为其赋值为空)赋值给成员变量,回到add方法添加该元素到StringBuilder中,第二次add到prepareBuilder方法中只会向StringBuilder实例中添加delimiter分割符,然后出来add方法中又将第二个元素添加到其中。这样就完成了为这些元素连接一个分隔符,并放入到StringBuilder实例中,最后toString()返回。
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; } } }