成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[439751]]

大家好,我是指北君。

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

問題場景

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

舉個例子

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

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

  1. Java nullis great! 

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

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

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

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

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

使用String.concat() 方法

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

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

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

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

使用StringBuilder類

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

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

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

使用StringJoiner類 (Java 8+)

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

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

  1. StringJoiner result = new StringJoiner(""); 
  2.  
  3. for (String value : values) { 
  4.     result = result.add(getNonNullString(value)); 

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

使用Streams.filter (Java 8+)

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

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

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

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

總結

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

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

 

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2024-06-12 13:54:37

編程語言字符串代碼

2021-05-31 07:57:00

拼接字符串Java

2019-12-25 15:41:50

JavaScript程序員編程語言

2013-06-24 15:16:29

Java字符串拼接

2021-10-31 23:01:50

語言拼接字符串

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

2023-10-31 18:57:02

Java字符串

2010-10-09 11:43:10

MYSQL字符串

2019-02-27 09:08:20

Java 8StringJoineIDEA

2016-10-12 10:18:53

Java字符串源碼分析

2013-04-28 10:36:00

Obj-C數組Obj-C字符串拼接與

2025-02-27 08:18:40

2011-07-18 13:34:44

SQL Server數拼接字符串

2021-02-15 21:48:37

Python解釋器源碼

2016-12-27 09:46:55

Java 8StringBuild

2017-01-19 11:26:55

Java 8StringBuild

2025-01-03 08:31:43

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线免费看黄 | 日韩一级在线 | 可以免费观看的av片 | h视频免费在线观看 | 91精品国产91久久久久游泳池 | 四虎影院在线观看免费视频 | 久久综合成人精品亚洲另类欧美 | 国产视频久久久 | 一级欧美 | 中文字幕在线一区 | 视频精品一区二区三区 | 天天天久久久 | 国产日韩欧美一区二区 | 视频一区二区在线观看 | 91精品国产自产精品男人的天堂 | 综合另类 | 国产一卡二卡三卡 | 精品一区二区三区在线视频 | 精彩视频一区二区三区 | 秋霞a级毛片在线看 | 国产精品日韩在线观看一区二区 | 欧美另类视频在线 | 超碰97人人人人人蜜桃 | 成人午夜精品 | 日韩激情在线 | 欧美国产视频 | 一区二区三区视频在线观看 | 91大神新作在线观看 | 国产一区二区三区视频免费观看 | 日本中文字幕在线视频 | 亚洲国产精品久久久久秋霞不卡 | 久久曰视频 | 污视频在线免费观看 | 亚洲精品综合 | 国产精品久久av | 亚洲国产成人精 | 国产精品污www一区二区三区 | 亚洲区一| 黄瓜av | 午夜视频在线免费观看 | 电影91久久久 |