欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實戰(zhàn)小技巧之優(yōu)雅的實現(xiàn)字符串拼接

 更新時間:2021年08月16日 15:56:33   作者:一灰灰  
字符串拼接是我們在Java代碼中比較經(jīng)常要做的事情,就是把多個字符串拼接到一起,這篇文章主要給大家介紹了關(guān)于java實戰(zhàn)小技巧之優(yōu)雅的實現(xiàn)字符串拼接的相關(guān)資料,需要的朋友可以參考下

前言

字符串拼接不管是在業(yè)務(wù)上,還是寫算法時都會頻繁使用到。

相信沒有小伙伴沒有寫過這樣的代碼,比如說現(xiàn)在讓我們來實現(xiàn)一個字符串拼接的場景,怎樣的實現(xiàn)才算是優(yōu)雅的呢?

以將int數(shù)組轉(zhuǎn)為英文逗號分隔的字符串為例進行演示

String底層原理

在討論字符串拼接時,首先需要知道String的底層原理。

看下結(jié)構(gòu)

private final byte[] value;

這一行代碼已經(jīng)可以說明很多東西。字符串實質(zhì)就是不可變的byte數(shù)組。因為不可變,所以對他進行拼接對他拼接實際就是生成了多個對象,這就是不鼓勵對字符串進行拼接的原因。但不可變也有很多好處,例如線程安全、可以存在字符串緩沖池復(fù)用字符串等。

1. 普通寫法

直接使用StringBuilder來拼接

public String join(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    for(Integer sub: list) {
        builder.append(sub).append(",");
    }
    return builder.substring(0, builder.length() - 1);
}

上面這種寫法相信比較常見,相對來說不太順眼的地方就是最后的toString,需要將最后的一個英文逗號給干掉
當(dāng)然也可以用下面這種事前判斷方式,避免最終的字符串截取

public String join2(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    boolean first = true;
    for (Integer sub: list) {
        if (first) {
            first = false;
        } else {
            builder.append(",");
        }
        builder.append(sub);
    }
    return builder.toString();
}

2. StringJoiner

上面實現(xiàn)中,干掉最后的一個分隔符實在不是很優(yōu)雅,那么有更好一點的用法么,接下來看一下使用StringJoiner的方式

public String join3(List<Integer> list) {
    StringJoiner joiner = new StringJoiner(",");
    for (Integer s : list) {
        joiner.add(String.valueOf(s));
    }
    return joiner.toString();
}

StringJoiner由jdk1.8提供,除了上面的基礎(chǔ)玩法之外,結(jié)合jdk1.8帶來的流操作方式,可以更簡潔的實現(xiàn)

return list.stream().map(String::valueOf).collect(Collectors.joining(","));

怎么樣,上面這個實現(xiàn)比起前面的代碼是不是要簡潔多了,一行代碼完事

3. guava joiner

如果使用的jdk還不是1.8版本,不能使用上面的StringJoiner,沒關(guān)系,還有g(shù)uava的Joiner也可以實現(xiàn)

public String join5(List<Integer> list) {
    return Joiner.on(",").join(list);
}

注意

接收的參數(shù)類型為: 數(shù)組/Iterable/Iterator/可變參數(shù), 基本上可以覆蓋我們?nèi)粘5臉I(yè)務(wù)場景

4. 小結(jié)

本篇文章的主題是一個非常非常常見的字符串拼接,一般來講,我們在做字符串拼接時,最麻煩的事情就是分隔符的處理,要么就是分隔符前置添加,每次循環(huán)都需要判斷是否為開頭;要么就是后置,最后取字符串時,干掉最后一個分隔符

本文提供了一個非常使用的方式StringJoiner,完全解決了上面的分隔符問題,它的使用有兩種場景

  • 簡單的容器轉(zhuǎn)String:直接借助Stream的Collectors.joining來實現(xiàn)
  • for循環(huán) (這種場景一般是for循環(huán)內(nèi)的邏輯不僅僅包括字符串拼接,還包括其他的業(yè)務(wù)邏輯): 循環(huán)內(nèi)直接執(zhí)行stringJoiner.add()添加

對于jdk1.8及以上的版本,優(yōu)先推薦使用上面說的StringJoiner來實現(xiàn)

總結(jié)

到此這篇關(guān)于java實戰(zhàn)小技巧之優(yōu)雅實現(xiàn)字符串拼接的文章就介紹到這了,更多相關(guān)java字符串拼接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論