中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中字符串常見的拼接方式有哪些

發布時間:2023-04-04 15:31:18 來源:億速云 閱讀:154 作者:iii 欄目:開發技術

這篇“Java中字符串常見的拼接方式有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java中字符串常見的拼接方式有哪些”文章吧。

方式一:+ 最常見的方式

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

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

先有StringBuffer后有StringBuilder,兩者就像是孿生雙胞胎,該有的都有,只不過大哥StringBuffer,大部分方法都經過synchronized修飾,所以StringBuffer是線程安全的,但是它效率就相對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類下的cocat()方法

如果拼接的字符串是null,concat會拋出NullPointerException。如果拼接的字符串是一個空字符串(“”),那么concat的效率要更高。如果拼接的字符串非常多,concat的效率就會下降,因為創建的字符串對象越多,開銷越大。

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

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

JDK1.8提供了一種新的字符串拼接姿勢:String類增加了一個靜態方法join,第一個參數為字符串連接符

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

方式五:StringJoiner

StringJoiner是JDK1.8,java.util包中的一個類,用于構造一個由分隔符重新連接的字符序列

		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, "", "");//默認前綴和后綴為"",重載調用
    }

    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;//空值被設置為只有前后綴
    }
	//設置空值,檢查是否為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;//沒有值將返回空值或者后續設置的空值
        } else {
            if (suffix.equals("")) {
                return value.toString();//后綴為""直接返回字符串,不用添加
            } else {
	            //后綴不為"",添加后綴,然后直接返回字符串,修改長度
                int initialLength = value.length();
                String result = value.append(suffix).toString();
                // reset value to pre-append initialLength
                value.setLength(initialLength);
                return result;
            }
        }
    }
    初始化,先添加前綴,有了之后每次先添加間隔符,StringBuilder后續append字符串
    public StringJoiner add(CharSequence newElement) {
        prepareBuilder().append(newElement);
        return this;
    }
	//合并StringJoiner,注意后面StringJoiner 的前綴就不要了,后面的appen進來
    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.
        //不忘添加后綴的長度
        return (value != null ? value.length() + suffix.length() :
                emptyValue.length());
    }
}

方式六:StringUtils.join()

實戰項目中,我們處理字符串的時候,經常會用到這個類.org.apache.commons.lang3.StringUtils包下,該方法更善于拼接數組中的字符串,并且不用擔心 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);

以上就是關于“Java中字符串常見的拼接方式有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔西| 湘阴县| 雷山县| 巴青县| 洛南县| 当涂县| 泗洪县| 行唐县| 梁河县| 麻城市| 襄垣县| 莱芜市| 西乡县| 图们市| 勃利县| 商河县| 疏附县| 浮梁县| 云阳县| 禄丰县| 武定县| 泸水县| 尼玛县| 合川市| 云梦县| 广宁县| 全南县| 大丰市| 凌海市| 股票| 英吉沙县| 萨嘎县| 嘉鱼县| 平阳县| 凤山市| 错那县| 虹口区| 张掖市| 鹰潭市| 姚安县| 明星|