Java8 拼接字符串 StringJoiner
生活随笔
收集整理的這篇文章主要介紹了
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)題。
- 上一篇: 项目整体管理过程
- 下一篇: java美元兑换,(Java实现) 美元