终于,java 8在java.util软件包下发布了stringjoiner类。我认为相对于我们使用stringbuffer / stringbuilder的旧式做法来连接字符串,这并非是一个迥然不同的实现。我们一起来看一看stringjoiner的用法和它的内部实现。
例如,我有两个字符串为“smart”和“techie”,我想连接这些字符串为[smart,techie]。在这种情况下,我的前缀为“[”,后缀为“]”,以及分隔符为“,”。 stringjoiner有如下两个构造函数。
stringjoiner(charsequence delimiter)
stringjoiner(charsequence delimiter, charsequence prefix, charsequence suffix)
我们想要有前缀和后缀,因此在例子中使用第二个构造函数。
stringjoiner sjr = new stringjoiner(",", "[", "]");
sjr.add("smart").add("techie");
system.out.println("the final joined string is " + sjr);
如果我们不希望有前缀和后缀,那么就:
sjr1.add("smart").add("techie");
system.out.println("the final joined string is " + sjr1);
现在,我们将看到add和tostring()方法的实现。
public stringjoiner add(charsequence newelement) {
preparebuilder().append(newelement);
return this;
}
preparebuilder()实现如下。
private stringbuilder preparebuilder() {
if (value != null) {
value.append(delimiter);
} else {
value = new stringbuilder().append(prefix);
}
return value;
}
从上面的实现中,可以很明显看到stringjoiner遵循老式的做法。
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;
}
}
以上就是java8 stringjoiner的代码详解的详细内容。