你只會用 StringBuilder/ StringBuffer 拼接字串?
那你就 OUT 了!!
如果需要拼接分隔符的字串,建議使用 Java 8 中的這款拼接神器:StringJoiner,你值得擁有,
StringJoiner 基本使用
字面上理解就是用來拼接字串的,一般需要分隔符進行拼接,如:
hello, guys, 歡迎關注公眾號Java技術堆疊
這種三段式由 "," 分隔的字串,在 Java 8 之前要使用 StringBuilder/ StringBuffer 進行拼接,如:
StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(",");
sb.append("guys");
sb.append(",");
sb.append("歡迎關注公眾號Java技術堆疊");
String str = sb.toString();
都是相同的分隔符逗號,這樣拼接顯然過于傻瓜式,如果要拼接的字串非常多,代碼會十分難看,寫完感覺要崩潰,
然而 Java 8 之后有了 StringJoiner,這件事件就變得更簡單,分隔符這種全部一次性交給 StringJoiner 即可,
StringJoiner 基本使用示例:
public static void main(String[] args) {
StringJoiner stringJoiner = new StringJoiner(",");
stringJoiner.add("hello");
stringJoiner.add("guys");
stringJoiner.add("歡迎關注公眾號Java技術堆疊");
System.out.println(stringJoiner.toString());
}
輸出:
hello,guys,歡迎關注公眾號Java技術堆疊
可以看到,這樣寫十分的干凈清爽,也省去了許多沒有必要的分隔符拼接操作,代碼更優雅、只是可讀性沒 SB 直接拼接那么直觀,
StringJoiner 就這么簡單?
No!!!
StringJoiner 還有其他幾種用法,下面的篇幅堆疊長會帶大家解讀一下,
StringJoiner 詳細介紹
StringJoiner 的類結構圖:

它的父類就是 Object,這些成員變數和方法都有什么用呢?
成員變數:
- prefix:拼接后的字串前綴
- delimiter:拼接時的字串分隔符
- suffix:拼接后的字串后綴
- value:拼接后的值
- emptyValue:空值的情況,value為 null 時回傳
構造方法:

提供了兩個構造方法,一個必須帶分隔符,另一個必須帶分隔符、前綴、后綴,可以看了 emptyValue 默認為前綴+后綴組成,
公開方法:
- setEmptyValue:設定空值
- toString:轉換成 String
- add:添加字串
- merge:從另一個 StringJoiner 合并
- length:長度(包括前綴后綴)
流式 API
我們重點看下 add 方法原始碼:


可以看到內部其實就是用的 StringBuilder 進行封裝的,首次創建會先拼接前綴,后續先添加分隔符,再添加字串,
其實 String 底層也是用的 StringBuilder,具體可以關注公眾號Java技術堆疊在 Java 核心技術系列專欄中進行閱讀,
另外一點,add 方法就是回傳 StringJoiner 本身,所以可以像 StringBuilder/ StringBuffer 一樣進行流式處理,
如上面的示例一行代碼搞定:
public static void main(String[] args) {
StringJoiner stringJoiner = new StringJoiner(",").add("hello").add("guys").add("歡迎關注公眾號Java技術堆疊");
System.out.println(stringJoiner.toString());
}
前后綴拼接
在示例中需要指定前后綴:
public static void main(String[] args) {
StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
stringJoiner.add("hello");
stringJoiner.add("guys");
stringJoiner.add("歡迎關注公眾號Java技術堆疊");
System.out.println(stringJoiner.toString());
}
輸出:
[hello,guys,歡迎關注公眾號Java技術堆疊]
如上所示,前后都帶中括號進行了包裝,
空值處理
沒有拼接任何字串的幾個空值處理場景,
輸出空白字串:
public static void main(String[] args) {
StringJoiner stringJoiner = new StringJoiner(",");
System.out.println(stringJoiner.toString());
}
輸出前后綴:
public static void main(String[] args) {
StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
}
輸出:
[]
輸出指定字串:
通過 setEmptyValue 進行設定,
public static void main(String[] args) {
StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
stringJoiner.setEmptyValue("void");
System.out.println(stringJoiner.toString());
}
輸出:
void
String.join()
String.join() 這是針對 StringJoiner 又封裝了一層的 API,同樣出自 Java 8,可以傳入動態引數或者迭代器,
- java.lang.String#join(java.lang.CharSequence, java.lang.CharSequence...)
- java.lang.String#join(java.lang.CharSequence, java.lang.Iterable<? extends java.lang.CharSequence>)
原始碼如下:

看原始碼,這兩個方法只能進行簡單的拼接操作,不能添加前后綴、空值設定處理等,
來個示例:
public static void main(String[] args) {
String str = String.join(",", "hello", "guys", "歡迎關注公眾號Java技術堆疊");
System.out.println(str);
}
可以看到,簡單處理這樣使用更簡便,
總結
今天介紹了 StringJoiner、StringBuilder、String.join() 之間的關系及使用,在使用拼間多個相同的分隔符時,使用 StringJoiner,簡單處理使用 String.join() 也能完成,
針對不同的場景使用不同的 API,這才是最佳最優雅的處理方式,不要只會使用 StringBuilder!
這是 Java 8 系列的第 ? 篇文章了?堆疊長我也記不清了 ,但絕對不是最后一篇,看往期新特性教程在公眾號Java技術堆疊回復新特性即可,
去我的博客網站也可以看往期系列教程:
http://www.javastack.cn/
最后,希望對大家有幫助,后面我會繼續分享好玩的 Java 技術,關注公眾號第一時間推送,
覺得有用,三連走起哦~
著作權申明:本文系公眾號 "Java技術堆疊" 原創,原創實屬不易,轉載、參考本文內容請注明出處,禁止抄襲、洗稿,請自重,尊重他人勞動成果和知識產權,
近期熱文推薦:
1.Java 15 正式發布, 14 個新特性,重繪你的認知!!
2.終于靠開源專案弄到 IntelliJ IDEA 激活碼了,真香!
3.我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看,,
4.吊打 Tomcat ,Undertow 性能很炸!!
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/223885.html
標籤:Java
下一篇:網路編程之埠 port
