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