在Java中怎麼連接空字符串
- java
1. 概述
Java 提供了多種用於連接String
的.
然而, null
對象String
可能包含一些不需要的值。
在本教程中,我們將看到一些在連接String
null
String
對象的方法。
2. 問題陳述
假設我們想要連接一個String
數組的元素,其中任何元素都可能為null
。
我們可以簡單地使用 + 運算符來做到這一點:
String[] values = { "Java ", null, "", "is ", "great!" };
String result = "";
for (String value : values) {
result = result + value;
}
這會將所有元素連接到結果String
,如下所示:
Java nullis great!
但是,我們可能不想在輸出中顯示或附加這樣的“空”值。
同樣,如果我們的應用程序在 Java 8 或更高版本上運行String.join()
靜態方法獲得相同的輸出:
String result = String.join("", values);
我們也無法避免在使用String.join()
方法時連接空元素。
讓我們看看一些方法來避免連接那些null
元素並得到我們期望的結果:“Java 很棒!”。
3. 使用 + 運算符
加法 (+) 運算符被重載以連接 Java 中的String
在使用 + 運算符連接時,我們可以檢查String
是否為null
,並將null
String
替換為空(“”) String:
for (String value : values) {
result = result + (value == null ? "" : value);
}
assertEquals("Java is great!", result);
或者,我們可以將檢查null
String
的代碼提取到一個輔助方法中,該方法接受一個String
對象並返回一個非null
String
對象:
for (String value : values) {
result = result + getNonNullString(value);
}
在這裡, getNonNullString()
方法是我們的輔助方法。它只是檢查輸入String
對象null
如果輸入對象為null
,則返回空(“”) String
,否則返回相同的String
:
return value == null ? "" : value;
然而,正如我們所知, String
對像在 Java 中是不可變的。這意味著,每次我們String
對象時,它都會在內存中String
因此,使用 + 運算符進行連接的成本很高。
此外,我們可以使用這種創建輔助方法的方法來檢查各種其他連接支持操作中的null
String
讓我們來看看其中的一些。
4. 使用String.concat() M
方法
該Str
ing.conca
t
()
方法是一個很好的選擇,當我們想連接String
對象。
在這裡,我們可以使用getNonNullString()
方法來檢查null
對象並返回一個空String
:
for (String value : values) {
result = result.concat(getNonNullString(value));
}
getNonNullString()
方法返回的空String
被連接到結果,從而忽略null
對象。
5. 使用StringBuilder
類
[StringBuilder](https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html)
提供了一堆有用且方便的String
構建方法。其中之一是append()
方法。
在這裡,我們也可以在使用append()
方法getNonNullString()
方法來避免null
for (String value : values) {
result = result.append(getNonNullString(value));
}
6. 使用Streams.filter
(Java 8+)
Stream
API 提供了大量的順序和並行聚合操作。一個這樣的中間流操作是filter
,它接受一個Predicate
作為輸入,並根據給定的Predicate.
Stream
轉換為另一個Stream
因此,我們可以定義一個Predicate
來檢查String
null
值並將這個Predicate
傳遞給filter()
方法。因此, filter
器將從原始Stream.
過濾掉那些null
最後,我們可以使用Collectors.joining()
null
String
值,最後,將結果Stream
收集到一個String
變量中:
result = Stream.of(values).filter(value -> null != value).collect(Collectors.joining(""));
7. 使用StringJoiner
類(Java 8+)
StringJoiner
類提供String.join()
所有功能以及以給定前綴開頭並以給定後綴結尾的選項.
我們可以使用它的add()
方法來連接String
。
和以前一樣,我們可以使用我們的輔助方法getNonNullString()
來避免連接null
String
值:
StringJoiner result = new StringJoiner("");
for (String value : values) {
result = result.add(getNonNullString(value));
}
String.join()
和StringJoiner
之間的一個區別在於,與String.join()
不同,我們必須循環遍歷集合( rray, List,
等)以連接所有元素。
8. 結論
在本文中,我們展示了避免串聯null
String
對象的各種方法。總是有不止一種正確的方法來滿足我們的要求。因此,我們必須確定哪種方法最適合給定位置。
我們必須記住,連接String
本身可能是一項昂貴的操作,尤其是在循環中。因此,始終建議考慮 Java String
API 的性能方面。