欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java8 拼接字符串 StringJoiner

发布时间:2023/12/10 java 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java8 拼接字符串 StringJoiner 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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) {//间隔符,前缀和后缀判断是否为null,null将抛出异常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 'this'StringBuilder 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());} }

 

总结

以上是生活随笔为你收集整理的Java8 拼接字符串 StringJoiner的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。