国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java實(shí)用工具之StringJoiner詳解

發(fā)布時(shí)間:2021-07-06 11:13 來(lái)源:腳本之家 閱讀:0 作者:黃智霖-blog 欄目: 開(kāi)發(fā)技術(shù)

背景

在平時(shí)的業(yè)務(wù)開(kāi)發(fā)中,我們可能會(huì )遇到字符串列表根據分隔符進(jìn)行拼接的需求。比如:

輸入:

數組:[“a”,“b”,“c”]分隔符:","

輸出:

“a,b,c”

處理

通常我們可以使用StringBuilder根據下標位置決定是否需要添加分隔符以達到目的,比如:

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String[] strings = new String[]{"a", "b", "c"};
        String delimiter = ",";
        for (int i = 0; i < strings.length; i++) {
            if (i != 0) {
                sb.append(delimiter);
            }
            sb.append(strings[i]);
        }
        System.out.println(sb.toString());
    }

或者:

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String[] strings = new String[]{"a", "b", "c"};
        String delimiter = ",";
        int tmp = strings.length - 1;
        for (int i = 0; i < strings.length; i++) {
            sb.append(strings[i]);
            if (i != tmp) {
                sb.append(delimiter);
            }
        }
        System.out.println(sb.toString());
    }

但是每次遇到這種情況都去這樣拼接很麻煩,而且如果使用迭代器,沒(méi)有下標就不能使用這種方法。那么就每次append分隔符,最后再截斷:

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String[] strings = new String[]{"a", "b", "c"};
        String delimiter = ",";
        for (String str:strings) {
            sb.append(str).append(delimiter);
        }
        System.out.println(sb.substring(0,sb.length()-1));
    }

所以通常情況下,我們都會(huì )去擴展一個(gè)StringBuilder以提供分隔符組裝的功能,博主平時(shí)是這樣弄的:

public class MyStringBuilder {
    private StringBuilder stringBuilder;
    private String delimiter;

    public MyStringBuilder(String delimiter) {
        this.delimiter = delimiter;
    }

    public MyStringBuilder append(String item) {
        getStringBuilder().append(item);
        return this;
    }

    /**
     * 模擬的就是這個(gè)邏輯:
     * if(index != 0){
     *   append(delimiter);
     * }
     * append(str);
     *
     * @return
     */
    private StringBuilder getStringBuilder() {
        if (stringBuilder == null) {
            //相當于index==0,
            stringBuilder = new StringBuilder();
        } else {
            stringBuilder.append(delimiter);
        }
        return stringBuilder;
    }

    @Override
    public String toString() {
        return stringBuilder == null ? "" : stringBuilder.toString();
    }
}

在初始化的時(shí)候指定分隔符,然后每次直接append就行了,由內部決定在何時(shí)添加分隔符。
在JDK1.8之后,提供了一個(gè)StringJoiner類(lèi),提供了類(lèi)似的功能,可以在初始化的時(shí)候指定分隔符和前綴后綴:

StringJoiner sj = new StringJoiner(",","(",")");
sj.add("a").add("b").add("c");
System.out.println(sj.toString());
//輸出:(a,b,c)

博主大致看了一下StringJoiner的實(shí)現邏輯,很簡(jiǎn)單,和咱們擴展StringBuilder基本是一樣的邏輯,另外加入了前綴后綴,然后多了一個(gè)merge的功能:

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;
    }

到此這篇關(guān)于Java實(shí)用工具之StringJoiner詳解的文章就介紹到這了,更多相關(guān)Java StringJoiner內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

激情无码人妻又粗又大| 试看120秒做受小视频免费| 8X成年视频在线观看| 亚洲人成色77777在线观看| 日韩AV色综合网站| 国产成人无码精品一区在线观看|