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

Java中字符串常見(jiàn)的一些拼接方式總結(jié)

 更新時(shí)間:2023年04月04日 11:19:11   作者:Java小白筆記  
字符串拼接是我們?cè)贘ava代碼中比較經(jīng)常要做的事情,就是把多個(gè)字符串拼接到一起,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java中字符串常見(jiàn)的一些拼接方式,需要的朋友可以參考下

方式一:+ 最常見(jiàn)的方式

        String aa = "今天";
        String bb = "明天";
        System.out.println(aa+bb);

方式二:StringBuilder.append()和StringBuffer.append()

先有StringBuffer后有StringBuilder,兩者就像是孿生雙胞胎,該有的都有,只不過(guò)大哥StringBuffer,大部分方法都經(jīng)過(guò)synchronized修飾,所以StringBuffer是線程安全的,但是它效率就相對(duì)StringBuilder較低

        String aa = "今天";
        String bb = "明天";
        StringBuilder sber = new StringBuilder();
        StringBuffer sbf = new StringBuffer();
        sber.append(aa).append(bb);
        System.out.println(sber.toString());
        sbf.append(aa).append(bb);
        System.out.println(sbf.toString());

方式三:String類(lèi)下的cocat()方法

如果拼接的字符串是null,concat會(huì)拋出NullPointerException。如果拼接的字符串是一個(gè)空字符串(“”),那么concat的效率要更高。如果拼接的字符串非常多,concat的效率就會(huì)下降,因?yàn)閯?chuàng)建的字符串對(duì)象越多,開(kāi)銷(xiāo)越大。

        String aa = "今天";
        String bb = "明天";
        String concat = aa.concat(bb);
        System.out.println(concat);

方式四:String類(lèi)下的join()方法

JDK1.8提供了一種新的字符串拼接姿勢(shì):String類(lèi)增加了一個(gè)靜態(tài)方法join,第一個(gè)參數(shù)為字符串連接符

		String aa = "今天";
        String bb = "明天";
        String join = String.join("-", aa, bb);
        System.out.println(join);

方式五:StringJoiner

StringJoiner是JDK1.8,java.util包中的一個(gè)類(lèi),用于構(gòu)造一個(gè)由分隔符重新連接的字符序列

		String aa = "今天";
        String bb = "明天";
        StringJoiner sj = new StringJoiner(":", "[", "]");
        sj.add(aa).add(bb);
        System.out.println(sj.toString());

StringJoiner源碼

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è)置空值,檢查是否為null
    public StringJoiner setEmptyValue(CharSequence emptyValue) {
        this.emptyValue = Objects.requireNonNull(emptyValue,
            "The empty value must not be null").toString();
        return this;
    }

    @Override
    public 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 initialLength
                value.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());
    }
}

方式六:StringUtils.join()

實(shí)戰(zhàn)項(xiàng)目中,我們處理字符串的時(shí)候,經(jīng)常會(huì)用到這個(gè)類(lèi).org.apache.commons.lang3.StringUtils包下,該方法更善于拼接數(shù)組中的字符串,并且不用擔(dān)心 NullPointerException。

		String aa = "今天";
        String bb = "明天";
        String ids[] = {"1","2","3"};
        System.out.println(StringUtils.join(aa,bb,"-","124"));
        String join1 = StringUtils.join(ids,",");
        System.out.println(join1);

總結(jié)

到此這篇關(guān)于Java中字符串常見(jiàn)的一些拼接方式的文章就介紹到這了,更多相關(guān)Java字符串拼接方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SpringBoot中的index首頁(yè)的訪問(wèn)、自定義Favicon圖標(biāo)

    詳解SpringBoot中的index首頁(yè)的訪問(wèn)、自定義Favicon圖標(biāo)

    這篇文章主要介紹了SpringBoot中的index首頁(yè)的訪問(wèn)、自定義Favicon圖標(biāo),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java 工具類(lèi)總結(jié)目錄(分享)

    Java 工具類(lèi)總結(jié)目錄(分享)

    下面小編就為大家?guī)?lái)一篇Java 工具類(lèi)總結(jié)目錄(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • SpringBoot項(xiàng)目鑒權(quán)的4種方式小結(jié)

    SpringBoot項(xiàng)目鑒權(quán)的4種方式小結(jié)

    本文主要介紹了SpringBoot項(xiàng)目鑒權(quán)的4種方式小結(jié),包括傳統(tǒng)AOP、攔截器、參數(shù)解析器和過(guò)濾器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • SpringBoot JSON全局日期格式轉(zhuǎn)換器實(shí)現(xiàn)方式

    SpringBoot JSON全局日期格式轉(zhuǎn)換器實(shí)現(xiàn)方式

    這篇文章主要介紹了SpringBoot JSON全局日期格式轉(zhuǎn)換器,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Java實(shí)現(xiàn)簡(jiǎn)單字符生成器代碼例子

    Java實(shí)現(xiàn)簡(jiǎn)單字符生成器代碼例子

    這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單字符生成器代碼例子,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • Java中shiro框架和security框架的區(qū)別

    Java中shiro框架和security框架的區(qū)別

    這篇文章主要介紹了Java中shiro框架和security框架的區(qū)別,shiro和security作為兩款流行的功能強(qiáng)大的且易于使用的java安全認(rèn)證框架,在近些年中的項(xiàng)目開(kāi)發(fā)過(guò)程中使用廣泛,今天我們就來(lái)一起了解一下兩者的區(qū)別
    2023-08-08
  • MyBatis找不到mapper文件的實(shí)現(xiàn)

    MyBatis找不到mapper文件的實(shí)現(xiàn)

    這篇文章主要介紹了MyBatis找不到mapper文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 在Java的Spring框架中配置Quartz的教程

    在Java的Spring框架中配置Quartz的教程

    這篇文章主要介紹了在Java的Spring框架中配置Quartz的教程,Quartz是一款高人氣的開(kāi)源作業(yè)調(diào)度框架,需要的朋友可以參考下
    2016-03-03
  • 一文解開(kāi)java中字符串編碼的小秘密(干貨)

    一文解開(kāi)java中字符串編碼的小秘密(干貨)

    這篇文章主要介紹了一文解開(kāi)java中字符串編碼的小秘密(干貨),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Spring中的依賴注入DI詳解

    Spring中的依賴注入DI詳解

    這篇文章主要介紹了Spring中的依賴注入DI詳解,組件之間依賴關(guān)系由容器在運(yùn)行期決定,形象的說(shuō),即由容器動(dòng)態(tài)的將依賴關(guān)系注入到組件之中,依賴注入的目的并非為軟件系統(tǒng)帶來(lái)更多功能,是為了提升組件重用的頻率,并為系統(tǒng)搭建一個(gè)靈活、可擴(kuò)展的平臺(tái),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

温泉县| 大方县| 荆门市| 安仁县| 河间市| 天祝| 广河县| 安仁县| 鄂尔多斯市| 依安县| 昌宁县| 缙云县| 乐亭县| 会昌县| 嘉黎县| 安福县| 辽宁省| 富宁县| 丰县| 文昌市| 班戈县| 岐山县| 交城县| 武鸣县| 宁乡县| 梅州市| 高碑店市| 咸宁市| 定南县| 屏南县| 东海县| 灵石县| 长葛市| 定安县| 扎兰屯市| 竹溪县| 海丰县| 长沙县| 剑阁县| 融水| 大荔县|