国泰君安建设工程官方网站,申请网站怎么申请,网站建设税率多少,威海住房和城乡建设厅网站StringJoiner是Java8新出的一个类#xff0c;用于构造由分隔符分隔的字符序列#xff0c;并可选择性地从提供的前缀开始和以提供的后缀结尾。省的我们开发人员再次通过StringBuffer或者StingBuilder拼接。 我们查看一下一下代码#xff0c;试着猜一下。
1.简单的字符串拼接…StringJoiner是Java8新出的一个类用于构造由分隔符分隔的字符序列并可选择性地从提供的前缀开始和以提供的后缀结尾。省的我们开发人员再次通过StringBuffer或者StingBuilder拼接。 我们查看一下一下代码试着猜一下。
1.简单的字符串拼接 输出HelloWorld 2:可使用特定的分隔符或是前后缀来拼接字符串
注当我们使用StringJoiner(CharSequence delimiter)初始化一个StringJoiner的时候这个delimiter其实是分隔符并不是字符串的初始值 输出[Hello,World] 3.实现原理
依赖StringBuilder实现性能和StringBuilder差不多同样也是非线程安全的 package java.util;public final class StringJoiner {private final String prefix;//前缀private final String delimiter;//间隔符private final String suffix;//后缀private StringBuilder value;//值private String emptyValue;//空值public StringJoiner(CharSequence delimiter) {this(delimiter, , );//默认前缀和后缀为,重载调用}public StringJoiner(CharSequence delimiter,CharSequence prefix,CharSequence suffix) {//间隔符前缀和后缀判断是否为nullnull将抛出异常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();this.emptyValue this.prefix this.suffix;//空值被设置为只有前后缀}//设置空值检查是否为nullpublic StringJoiner setEmptyValue(CharSequence emptyValue) {this.emptyValue Objects.requireNonNull(emptyValue,The empty value must not be null).toString();return this;}Overridepublic 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 initialLengthvalue.setLength(initialLength);return result;}}}初始化先添加前缀有了之后每次先添加间隔符StringBuilder后续append字符串public StringJoiner add(CharSequence newElement) {prepareBuilder().append(newElement);return this;}//合并StringJoiner注意后面StringJoiner 的前缀就不要了后面的appen进来public StringJoiner merge(StringJoiner other) {Objects.requireNonNull(other);if (other.value ! null) {final int length other.value.length();// lock the length so that we can seize the data to be appended// before initiate copying to avoid interference, especially when// merge thisStringBuilder builder prepareBuilder();builder.append(other.value, other.prefix.length(), length);}return this;}//初始化先添加前缀有了之后每次先添加间隔符private StringBuilder prepareBuilder() {if (value ! null) {value.append(delimiter);} else {value new StringBuilder().append(prefix);}return value;}public int length() {// Remember that we never actually append the suffix unless we return// the full (present) value or some sub-string or length of it, so that// we can add on more if we need to.//不忘添加后缀的长度return (value ! null ? value.length() suffix.length() :emptyValue.length());}
}