精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

null字符串對象串聯(lián)的各種方法

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 16:27 ? 次閱讀

Java 提供了多種方法和類可以用來拼接字符串。但是如果我們不注意 null 對象,則生成的 String 可能包含一些不需要的值。

問題場景

假設(shè)我們要拼接的 String 數(shù)組的元素,其中任何元素都可能為 null。

舉個例子

String[] values = { "Java ", null, "", "is ", "great!" };
String result = "";

for (String value : values) {
 result = result + value;
}

我們簡單地使用 + 運算符執(zhí)行拼接,得出來的結(jié)果是

Java nullis great!

但是,我們正常情況肯定是不喜歡在結(jié)果中包含 "null" 值。

同樣,如果我們的應(yīng)用程序在 Java 8 或更高版本上運行,我們使用 String.join() 靜態(tài)方法獲得相同的輸出:

String result = String.join("", values);

我們也不能避免在使用 String.join() 方法時連接 null 元素。

讓我們看看一些方法來避免這些空元素被串聯(lián)起來,并獲得我們期望的結(jié)果:"Java is great"

使用 + 運算符

加法 (+) 運算符被重載以連接 Java 中的字符串。在使用 + 運算符進行連接時,我們可以檢查 String 是否為 null,并將 null 字符串替換為空 ("")字符串:

for (String value : values) {
 result = result + (value == null ? "" : value);
}

assertEquals("Java is great!", result);

或者,我們可以將檢查空字符串的代碼提取到一個 getNonNullString() 方法中,該方法接受一個String對象并返回一個非空字符串對象:

public String getNonNullString(value) {
    return value == null ? "" : value;
}

for (String value : values) {
 result = result + getNonNullString(value);
}

但是 String 對象在Java中是不可變的。這意味著每次我們使用 + 運算符連接 String 對象時,都會在內(nèi)存中創(chuàng)建一個新的 String。因此使用 + 運算符進行拼接是比較浪費資源的。

使用String.concat() 方法

當我們想要拼接 String 對象時,String.concat() 方法是一個不錯的選擇。

在這里,我們可以使用我們的 getNonNullString() 方法,該方法檢查空對象并返回空字符串:

for (String value : values) {
    result = result.concat(getNonNullString(value));
}

getNonNullString()方法返回的空字符串與結(jié)果串聯(lián),從而忽略null對象。

使用StringBuilder類

StringBuilder 提供了一堆有用且方便的字符串構(gòu)建方法。其中之一是 append() 方法。

在這里,我們可以使用相同的 getNonNullString() 方法來避免在使用 append() 方法時出現(xiàn)空對象:

for (String value : values) {
    result = result.append(getNonNullString(value));
}

使用StringJoiner類 (Java 8+)

StringJoiner 類提供了 String.join() 的所有功能,以及一個以給定前綴開頭并以給定后綴結(jié)尾的選項。我們可以使用它的 add()方法來連接字符串s。

和以前一樣,我們可以使用我們的幫助器方法 getNonNullString() 來避免空字符串值被串聯(lián)起來:

StringJoiner result = new StringJoiner("");

for (String value : values) {
    result = result.add(getNonNullString(value));
}

String.join() 和 StringJoiner 之間的一個區(qū)別是,與 String.join() 不同,我們必須遍歷集合(Array、List等)來聯(lián)接所有元素。

使用Streams.filter (Java 8+)

Stream API 提供大量順序和并行聚合操作。一個這樣的中間流操作是過濾器,它接受一個謂詞作為輸入,并根據(jù)給定的謂詞將流轉(zhuǎn)換為另一個流。

因此,我們可以定義一個謂詞,該謂詞將檢查字符串的空值,并將此謂詞傳遞給filter()方法。因此,篩選器將從原始流中篩選出這些空值。

最后,我們可以使用Collectors.joining()連接所有這些非空字符串值,最后將生成的Stream收集到String變量中:

result = Stream.of(values).filter(value - > null != value).collect(Collectors.joining(""));

總結(jié)

在本文中,我們演示了避免 null 字符串對象串聯(lián)的各種方法。總會有不止一種正確的方法來滿足我們的要求。因此,我們必須確定哪種方法最適合給定的地方。

我們必須記住,連接String本身可能是一個昂貴的操作,特別是在循環(huán)中。因此,始終建議考慮 Java 字符串 API 的性能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2959

    瀏覽量

    104553
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    577

    瀏覽量

    20486
  • null
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    3919
  • string
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    4719
收藏 人收藏

    評論

    相關(guān)推薦

    Python字符串的特點和修改字符串的常見四種方法

    Python中修改字符串的幾種方法
    發(fā)表于 02-26 16:52

    請問JavaScript字符串對象String是什么?

    字符串對象 String 提供了對字符串進行處理的屬性和方法
    發(fā)表于 11-05 06:39

    python字符串拼接方式了解

    ()方法拼接 用string模塊中的Template對象 例子: fruit1 = ‘a(chǎn)pples’ fruit2 = ‘bananas’ fruit3 = ‘pears’ 要求: 輸出字符串
    發(fā)表于 12-06 10:09 ?1029次閱讀

    實踐得出Labview字符串分離的四種方法

    1.??? 第一種方法名稱:掐頭去尾去脖子使用范圍:適用于任何情況流程:步驟一:“拉力1:100g. 拉力2:2000g. 拉力3:30g” “搜索/拆分字符串”(“搜索匹配字符串/字符
    發(fā)表于 07-04 16:54 ?1.2w次閱讀
    實踐得出Labview<b class='flag-5'>字符串</b>分離的四<b class='flag-5'>種方法</b>

    什么是復(fù)制字符串?Python如何復(fù)制字符串

    。 在上一篇文章《你真的知道Python的字符串怎么用嗎?》里,我突發(fā)奇想,將字符串跟列表做了比較,然后發(fā)現(xiàn)字符串竟然沒有復(fù)制的方法。當時沒有細想,只說要擱置疑問。過后,有好學的小伙伴
    發(fā)表于 11-25 10:32 ?2994次閱讀

    字符串string對象操作的全面總結(jié)

    ? ? 字符串操作看似簡單,其實非常重要,不注意的話,經(jīng)常出現(xiàn)代碼運行結(jié)果和自己想要的不一致,甚至崩潰。本文總結(jié)了一些構(gòu)建string對象方法、修改string對象
    的頭像 發(fā)表于 11-11 11:23 ?1911次閱讀
    <b class='flag-5'>字符串</b>string<b class='flag-5'>對象</b>操作的全面總結(jié)

    python對齊字符串的兩種方法

    當你不指定 < 、>、^ 時,對字符串,默認左對齊;對數(shù)值,默認右對齊
    的頭像 發(fā)表于 04-12 15:27 ?3301次閱讀

    平化字符串處理方法簡介

    這里介紹一組有用的字符串處理方法,即平化至字符串和從字符串還原。
    的頭像 發(fā)表于 09-26 10:20 ?2233次閱讀

    python字符串有哪些特定方法

    python字符串序列操作也適用于列表和元組。 python字符串還有獨有方法,即字符串對象的函數(shù),其他
    的頭像 發(fā)表于 02-23 15:02 ?678次閱讀

    C語言定義字符串的幾種方法

    C語言中定義字符串有哪些方法
    的頭像 發(fā)表于 03-31 09:41 ?3492次閱讀

    Python中檢查字符串包含的方法

    Python 有多種處理字符串方法。今天我們介紹如何檢查一個字符串中是否包含另一個字符串
    的頭像 發(fā)表于 05-14 16:02 ?1.6w次閱讀

    代碼字符串分割方法

    的 String#split 來分割。 使用 String#split 方法 String 類中 split 方法,是我們平常處理字符串分割最常用的方法之一,它可以根據(jù)給定的分隔符或正
    的頭像 發(fā)表于 09-25 11:42 ?775次閱讀

    如何去掉oracle字符型數(shù)據(jù)里的null

    等同于空字符串,空字符串是一個有效的值,而NULL值表示未知或不適用的值。在處理數(shù)據(jù)時,我們有時需要將NULL值替換為其他的值或者將其忽略。 下面是去掉Oracle
    的頭像 發(fā)表于 12-06 09:46 ?1215次閱讀

    C語言字符串編譯函數(shù)介紹

    在C語言中,字符串實際上是使用null字符O'終止的一維字符數(shù)組。因此,一個以null結(jié)尾的
    的頭像 發(fā)表于 03-07 16:18 ?480次閱讀
    C語言<b class='flag-5'>字符串</b>編譯函數(shù)介紹

    labview字符串如何轉(zhuǎn)換為16進制字符串

    在LabVIEW中,將字符串轉(zhuǎn)換為16進制字符串是一個常見的需求,尤其是在處理數(shù)據(jù)通信和硬件接口時。LabVIEW提供了多種方法來實現(xiàn)這一轉(zhuǎn)換,包括使用內(nèi)置函數(shù)、編寫VI(Virtual
    的頭像 發(fā)表于 09-04 15:54 ?1874次閱讀