日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java8 拼接字符串 StringJoiner

發(fā)布時(shí)間:2023/12/10 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java8 拼接字符串 StringJoiner 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

StringJoiner是Java8新出的一個(gè)類(lèi),用于構(gòu)造由分隔符分隔的字符序列,并可選擇性地從提供的前綴開(kāi)始和以提供的后綴結(jié)尾。省的我們開(kāi)發(fā)人員再次通過(guò)StringBuffer或者StingBuilder拼接。
我們查看一下一下代碼,試著猜一下。

1.簡(jiǎn)單的字符串拼接

  輸出:HelloWorld

?

2:可使用特定的分隔符或是前后綴來(lái)拼接字符串

注:當(dāng)我們使用StringJoiner(CharSequence delimiter)初始化一個(gè)StringJoiner的時(shí)候,這個(gè)delimiter其實(shí)是分隔符,并不是字符串的初始值

 輸出:[Hello,World]

?

3.實(shí)現(xiàn)原理

依賴StringBuilder實(shí)現(xiàn),性能和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, "", "");//默認(rèn)前綴和后綴為"",重載調(diào)用}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;//空值被設(shè)置為只有前后綴}//設(shè)置空值,檢查是否為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;//沒(méi)有值將返回空值或者后續(xù)設(shè)置的空值} else {if (suffix.equals("")) {return value.toString();//后綴為""直接返回字符串,不用添加} else {//后綴不為"",添加后綴,然后直接返回字符串,修改長(zhǎng)度int initialLength = value.length();String result = value.append(suffix).toString();// reset value to pre-append initialLengthvalue.setLength(initialLength);return result;}}}初始化,先添加前綴,有了之后每次先添加間隔符,StringBuilder后續(xù)append字符串public StringJoiner add(CharSequence newElement) {prepareBuilder().append(newElement);return this;}//合并StringJoiner,注意后面StringJoiner 的前綴就不要了,后面的appen進(jìn)來(lái)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.//不忘添加后綴的長(zhǎng)度return (value != null ? value.length() + suffix.length() :emptyValue.length());} }

?

總結(jié)

以上是生活随笔為你收集整理的Java8 拼接字符串 StringJoiner的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。