本文共 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/