在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

null字符串對象串聯的各種方法

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

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

問題場景

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

舉個例子

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

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

我們簡單地使用 + 運算符執行拼接,得出來的結果是

Java nullis great!

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

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

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

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

讓我們看看一些方法來避免這些空元素被串聯起來,并獲得我們期望的結果:"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 對象時,都會在內存中創建一個新的 String。因此使用 + 運算符進行拼接是比較浪費資源的。

使用String.concat() 方法

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

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

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

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

使用StringBuilder類

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

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

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

使用StringJoiner類 (Java 8+)

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

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

StringJoiner result = new StringJoiner("");

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

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

使用Streams.filter (Java 8+)

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

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

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

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

總結

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

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

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

    關注

    19

    文章

    2967

    瀏覽量

    104751
  • 字符串
    +關注

    關注

    1

    文章

    579

    瀏覽量

    20516
  • null
    +關注

    關注

    0

    文章

    19

    瀏覽量

    3974
  • string
    +關注

    關注

    0

    文章

    40

    瀏覽量

    4735
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    python字符串拼接方式了解

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

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

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

    什么是復制字符串?Python如何復制字符串

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

    字符串string對象操作的全面總結

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

    python對齊字符串的兩種方法

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

    平化字符串處理方法簡介

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

    python字符串有哪些特定方法

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

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

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

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

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

    代碼字符串分割方法

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

    如何去掉oracle字符型數據里的null

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

    C語言字符串編譯函數介紹

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

    labview字符串如何轉換為16進制字符串

    在LabVIEW中,將字符串轉換為16進制字符串是一個常見的需求,尤其是在處理數據通信和硬件接口時。LabVIEW提供了多種方法來實現這一轉換,包括使用內置函數、編寫VI(Virtual
    的頭像 發表于 09-04 15:54 ?2476次閱讀
    主站蜘蛛池模板: 黄网站在线观看永久免费| 亚洲美女高清一区二区三区| 亚洲人成网站色7777| 免费恐怖片| 天天爽夜夜爽视频| 67xxxxxx日本| 色中文网| bt种子天堂| 午夜啪啪免费视频| 天堂在线观看中文字幕| 国产精品三区四区| 日本免费黄色| 777奇米影视一区二区三区| 在线h网站| 天堂男人网| 又粗又硬又大久久久 | 日本不卡免费一区| 日韩高清一级| 午夜在线观看视频在线播放版| 欧美精品区| 色噜噜成人综合网站| 夜夜爽www| 欧美人成a视频www| 久久伊人精品青青草原高清| 免费 在线播放| 亚洲精品黄色| 91p0rn永久备用地址二| xxx黄色片| 男女免费在线视频| 毛片在线不卡| 亚洲成人网在线| 99婷婷| 亚洲光棍天堂| 九九九色| 欧美成人在线网站| 人阁色第四影院在线观看| 国产乱码精品一区二区三| 91伊人网| 日本一区二区精品88| 人人爽人人干| 香蕉久久精品|