1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        你只會用 StringBuilder?試試 StringJoiner,真香!

        共 2690字,需瀏覽 6分鐘

         ·

        2020-12-06 21:24

        你只會用 StringBuilder/ StringBuffer 拼接字符串?

        那你就 OUT 了??!

        如果需要拼接分隔符的字符串,建議使用 Java 8 中的這款拼接神器:StringJoiner,你值得擁有。

        ?

        StringJoiner 基本使用

        字面上理解就是用來拼接字符串的,一般需要分隔符進(jìn)行拼接,如:

        hello, guys, AAA

        這種三段式由 "," 分隔的字符串,在 Java 8 之前要使用 StringBuilder/ StringBuffer 進(jìn)行拼接,如:

        StringBuilder?sb?=?new?StringBuilder();
        sb.append("hello");
        sb.append(",");
        sb.append("guys");
        sb.append(",");
        sb.append("AAA");
        String?str?=?sb.toString();

        都是相同的分隔符逗號,這樣拼接顯然過于傻瓜式,如果要拼接的字符串非常多,代碼會十分難看,寫完感覺要崩潰。

        然而 Java 8 之后有了 StringJoiner,這件事件就變得更簡單,分隔符這種全部一次性交給 StringJoiner 即可。

        StringJoiner 基本使用示例:

        public?static?void?main(String[]?args)?{
        ?StringJoiner?stringJoiner?=?new?StringJoiner(",");
        ?stringJoiner.add("hello");
        ?stringJoiner.add("guys");
        ?stringJoiner.add("AAA");
        ?System.out.println(stringJoiner.toString());
        }

        輸出:

        hello,guys,AAA

        可以看到,這樣寫十分的干凈清爽,也省去了許多沒有必要的分隔符拼接操作,代碼更優(yōu)雅、只是可讀性沒 SB 直接拼接那么直觀。

        StringJoiner 就這么簡單?

        No!!!

        StringJoiner 還有其他幾種用法,下面的篇幅棧長會帶大家解讀一下。

        ?

        StringJoiner 詳細(xì)介紹

        StringJoiner 的類結(jié)構(gòu)圖:


        它的父類就是 Object,這些成員變量和方法都有什么用呢?

        成員變量:

        • prefix:拼接后的字符串前綴

        • delimiter:拼接時的字符串分隔符

        • suffix:拼接后的字符串后綴

        • value:拼接后的值

        • emptyValue:空值的情況,value為 null 時返回

        構(gòu)造方法:

        提供了兩個構(gòu)造方法,一個必須帶分隔符,另一個必須帶分隔符、前綴、后綴,可以看了 emptyValue 默認(rèn)為前綴+后綴組成。

        公開方法:

        • setEmptyValue:設(shè)置空值

        • toString:轉(zhuǎn)換成 String

        • add:添加字符串

        • merge:從另一個 StringJoiner 合并

        • length:長度(包括前綴后綴)

        ?

        流式 API

        我們重點(diǎn)看下 add 方法源碼:

        可以看到內(nèi)部其實(shí)就是用的 StringBuilder 進(jìn)行封裝的,首次創(chuàng)建會先拼接前綴,后續(xù)先添加分隔符,再添加字符串。

        其實(shí) String 底層也是用的 StringBuilder

        另外一點(diǎn),add 方法就是返回 StringJoiner 本身,所以可以像 StringBuilder/ StringBuffer 一樣進(jìn)行流式處理。

        如上面的示例一行代碼搞定:

        public?static?void?main(String[]?args)?{
        ?StringJoiner?stringJoiner?=?new?StringJoiner(",").add("hello").add("guys").add("AAA");
        ?System.out.println(stringJoiner.toString());
        }



        前后綴拼接

        在示例中需要指定前后綴:

        public?static?void?main(String[]?args)?{
        ?StringJoiner?stringJoiner?=?new?StringJoiner(",",?"[",?"]");
        ?stringJoiner.add("hello");
        ?stringJoiner.add("guys");
        ?stringJoiner.add("AAA");
        ?System.out.println(stringJoiner.toString());
        }

        輸出:

        [hello,guys,AAA]

        如上所示,前后都帶中括號進(jìn)行了包裝。

        ?

        空值處理

        沒有拼接任何字符串的幾個空值處理場景。

        輸出空白字符串:

        public?static?void?main(String[]?args)?{
        ?StringJoiner?stringJoiner?=?new?StringJoiner(",");
        ?System.out.println(stringJoiner.toString());
        }

        輸出前后綴:

        public?static?void?main(String[]?args)?{
        ?StringJoiner?stringJoiner?=?new?StringJoiner(",",?"[",?"]");
        }

        輸出:

        []

        輸出指定字符串:

        通過 setEmptyValue 進(jìn)行設(shè)置。

        public?static?void?main(String[]?args)?{
        ?StringJoiner?stringJoiner?=?new?StringJoiner(",",?"[",?"]");
        ?stringJoiner.setEmptyValue("void");
        ?System.out.println(stringJoiner.toString());
        }

        輸出:

        void

        ?

        String.join()

        String.join() 這是針對 StringJoiner 又封裝了一層的 API,同樣出自 Java 8,可以傳入動態(tài)參數(shù)或者迭代器。

        • java.lang.String#join(java.lang.CharSequence, java.lang.CharSequence...)

        • java.lang.String#join(java.lang.CharSequence, java.lang.Iterable)

        源碼如下:

        看源碼,這兩個方法只能進(jìn)行簡單的拼接操作,不能添加前后綴、空值設(shè)置處理等。

        來個示例:

        public?static?void?main(String[]?args)?{
        ?String?str?=?String.join(",",?"hello",?"guys",?"AAA");
        ?System.out.println(str);
        }

        可以看到,簡單處理這樣使用更簡便。

        ?

        總結(jié)

        今天介紹了 StringJoiner、StringBuilder、String.join() 之間的關(guān)系及使用。在使用拼間多個相同的分隔符時,使用 StringJoiner,簡單處理使用 String.join() 也能完成。

        針對不同的場景使用不同的 API,這才是最佳最優(yōu)雅的處理方式,不要只會使用 StringBuilder!


        有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

        歡迎大家關(guān)注Java之道公眾號


        好文章,我在看??

        瀏覽 64
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            大香蕉色网 | 张柏芝xxxxxbbbbb性 | 成人免费无码区色情免费看 | 色老板综合 | 性做爰A片免费播放 | 欧美巨大丰满猛性社交 | 精品人妻无码一区二区三区四川人 | 扒开双腿猛进入jk校花视频 | 公交掀裙子从后面进去 | 久久久久久九九九九九 |