自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

字符串拼接這種小事,我翻車了...

開發(fā) 前端
最近指北君在一個字符串拼接的小事情上翻車了,真的是萬萬沒想到。Java 提供了多種方法和類可以用來拼接字符串。但是如果我們不注意 null 對象,則生成的 String 可能包含一些不需要的值。

[[439751]]

大家好,我是指北君。

最近指北君在一個字符串拼接的小事情上翻車了,真的是萬萬沒想到。Java 提供了多種方法和類可以用來拼接字符串。但是如果我們不注意 null 對象,則生成的 String 可能包含一些不需要的值。

問題場景

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

舉個例子

  1. String[] values = { "Java "null"""is ""great!" }; 
  2. String result = ""
  3.  
  4. for (String value : values) { 
  5.  result = result + value; 

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

  1. Java nullis great! 

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

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

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

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

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

使用 + 運算符

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

  1. for (String value : values) { 
  2.  result = result + (value == null ? "" : value); 
  3.  
  4. assertEquals("Java is great!", result); 

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

  1. public String getNonNullString(value) { 
  2.     return value == null ? "" : value; 
  3.  
  4. for (String value : values) { 
  5.  result = result + getNonNullString(value); 

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

使用String.concat() 方法

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

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

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

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

使用StringBuilder類

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

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

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

使用StringJoiner類 (Java 8+)

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

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

  1. StringJoiner result = new StringJoiner(""); 
  2.  
  3. for (String value : values) { 
  4.     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變量中:

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

總結(jié)

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

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

 

責(zé)任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

2024-06-12 13:54:37

編程語言字符串代碼

2021-05-31 07:57:00

拼接字符串Java

2019-12-25 15:41:50

JavaScript程序員編程語言

2021-10-31 23:01:50

語言拼接字符串

2013-06-24 15:16:29

Java字符串拼接

2021-06-11 18:08:00

Java字符串拼接

2011-07-11 16:00:22

字符串拼接

2022-11-25 07:53:26

bash腳本字符串

2011-07-11 15:36:44

JavaScript

2010-10-09 11:43:10

MYSQL字符串

2023-10-31 18:57:02

Java字符串

2019-02-27 09:08:20

Java 8StringJoineIDEA

2016-10-12 10:18:53

Java字符串源碼分析

2013-04-28 10:36:00

Obj-C數(shù)組Obj-C字符串拼接與

2025-02-27 08:18:40

2011-07-18 13:34:44

SQL Server數(shù)拼接字符串

2016-12-27 09:46:55

Java 8StringBuild

2021-02-15 21:48:37

Python解釋器源碼

2017-01-19 11:26:55

Java 8StringBuild

2025-01-03 08:31:43

點贊
收藏

51CTO技術(shù)棧公眾號