最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年05月11日 17:22:59   作者:黃智霖-blog  
這篇文章主要介紹了Java實(shí)用工具之StringJoiner詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下

背景

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

輸入:

數(shù)組:[“a”,“b”,“c”]分隔符:","

輸出:

“a,b,c”

處理

通常我們可以使用StringBuilder根據(jù)下標(biāo)位置決定是否需要添加分隔符以達(dá)到目的,比如:

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)有下標(biāo)就不能使用這種方法。那么就每次append分隔符,最后再截?cái)啵?/p>

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ì)去擴(kuò)展一個(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) {
            //相當(dāng)于index==0,
            stringBuilder = new StringBuilder();
        } else {
            stringBuilder.append(delimiter);
        }
        return stringBuilder;
    }

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

在初始化的時(shí)候指定分隔符,然后每次直接append就行了,由內(nèi)部決定在何時(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í)現(xiàn)邏輯,很簡(jiǎn)單,和咱們擴(kuò)展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內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot druid數(shù)據(jù)庫(kù)連接池連接失敗后一直重連的解決方法

    springboot druid數(shù)據(jù)庫(kù)連接池連接失敗后一直重連的解決方法

    本文主要介紹了springboot druid數(shù)據(jù)庫(kù)連接池連接失敗后一直重連的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • javaweb上傳下載實(shí)例完整版解析(下)

    javaweb上傳下載實(shí)例完整版解析(下)

    這篇文章主要為大家詳細(xì)解析了javaweb上傳下載實(shí)例,本文重點(diǎn)在于文件下載功能的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • java字符串切割實(shí)例學(xué)習(xí)(獲取文件名)

    java字符串切割實(shí)例學(xué)習(xí)(獲取文件名)

    在Java中處理一些路徑相關(guān)的問(wèn)題的時(shí)候,如要取出ie瀏覽器上傳文件的文件名,由于ie會(huì)把整個(gè)文件路徑都作為文件名上傳,需要用java.lang.String中的replaceAll或者split來(lái)處理,下面看看使用方法
    2013-12-12
  • Spring中Controller應(yīng)用深入理解

    Spring中Controller應(yīng)用深入理解

    這篇文章主要介紹了Spring項(xiàng)目中的Controller,Spring Controller本身也是一個(gè)Spring Bean,只是它多提供了Web能力,只需要造類(lèi)上提供@Controller注解即可
    2022-12-12
  • springboot項(xiàng)目如何防止XSS攻擊

    springboot項(xiàng)目如何防止XSS攻擊

    XSS攻擊全稱(chēng)跨站腳本攻擊,是一種在web應(yīng)用中的計(jì)算機(jī)安全漏洞,允許惡意web用戶將代碼植入到提供給其它用戶使用的頁(yè)面中。本文介紹防止XSS攻擊的方法
    2021-06-06
  • 智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    Cursor.so 是一個(gè)集成了 GPT-4 的國(guó)內(nèi)直接可以訪問(wèn)的,優(yōu)秀而強(qiáng)大的免費(fèi)代碼生成器,可以幫助你快速編寫(xiě)、編輯和討論代碼,這篇文章主要介紹了智能 AI 代碼生成工具 Cursor 安裝和使用介紹,需要的朋友可以參考下
    2023-05-05
  • Java多線程模式之Balking模式詳解

    Java多線程模式之Balking模式詳解

    這篇文章主要介紹了Java多線程模式之Balking模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了Balking模式的原理、用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • Java的接口和抽象類(lèi)深入理解

    Java的接口和抽象類(lèi)深入理解

    這篇文章主要介紹了Java的接口和抽象類(lèi)深入理解的相關(guān)資料,希望通過(guò)本文大家能夠理解應(yīng)用接口與抽象類(lèi)的使用方法,需要的朋友可以參考下
    2017-09-09
  • Java Property類(lèi)使用詳解

    Java Property類(lèi)使用詳解

    這篇文章主要介紹了Java Property類(lèi)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring Boot集成Spring Cloud Eureka進(jìn)行服務(wù)治理的方法

    Spring Boot集成Spring Cloud Eureka進(jìn)行服務(wù)治理的方法

    本文通過(guò)詳細(xì)的步驟和代碼示例,介紹了如何在Spring Boot中集成Spring Cloud Eureka進(jìn)行服務(wù)治理,通過(guò)這種方式,可以有效地管理和維護(hù)微服務(wù)架構(gòu)中的服務(wù),感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評(píng)論

崇左市| 兴和县| 丰都县| 淮阳县| 金塔县| 阜城县| 乌兰县| 黄陵县| 临汾市| 黑水县| 东阿县| 阿克苏市| 闸北区| 当涂县| 长顺县| 建德市| 蒲城县| 花莲县| 霍山县| 灵川县| 蒲江县| 英超| 砀山县| 西平县| 奉新县| 石渠县| 德令哈市| 通榆县| 垣曲县| 罗城| 勐海县| 镶黄旗| 根河市| 吴桥县| 平泉县| 永嘉县| 明星| 大渡口区| 屏南县| 额济纳旗| 天津市|