- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java實(shí)用工具之StringJoiner詳解
在平時(shí)的業(yè)務(wù)開(kāi)發(fā)中,我們可能會(huì )遇到字符串列表根據分隔符進(jìn)行拼接的需求。比如:
輸入:
數組:[“a”,“b”,“c”]分隔符:","輸出:
“a,b,c”
通常我們可以使用StringBuilder根據下標位置決定是否需要添加分隔符以達到目的,比如:
public static void main(String[] args) { StringBuilder sb = new StringBuilder(); String[] strings = new String[]{"a", "b", "c"}; String delimiter = ","; for (int i = 0; i < strings.length; i++) { if (i != 0) { sb.append(delimiter); } sb.append(strings[i]); } System.out.println(sb.toString()); }
或者:
public static void main(String[] args) { StringBuilder sb = new StringBuilder(); String[] strings = new String[]{"a", "b", "c"}; String delimiter = ","; int tmp = strings.length - 1; for (int i = 0; i < strings.length; i++) { sb.append(strings[i]); if (i != tmp) { sb.append(delimiter); } } System.out.println(sb.toString()); }
但是每次遇到這種情況都去這樣拼接很麻煩,而且如果使用迭代器,沒(méi)有下標就不能使用這種方法。那么就每次append分隔符,最后再截斷:
public static void main(String[] args) { StringBuilder sb = new StringBuilder(); String[] strings = new String[]{"a", "b", "c"}; String delimiter = ","; for (String str:strings) { sb.append(str).append(delimiter); } System.out.println(sb.substring(0,sb.length()-1)); }
所以通常情況下,我們都會(huì )去擴展一個(gè)StringBuilder以提供分隔符組裝的功能,博主平時(shí)是這樣弄的:
public class MyStringBuilder { private StringBuilder stringBuilder; private String delimiter; public MyStringBuilder(String delimiter) { this.delimiter = delimiter; } public MyStringBuilder append(String item) { getStringBuilder().append(item); return this; } /** * 模擬的就是這個(gè)邏輯: * if(index != 0){ * append(delimiter); * } * append(str); * * @return */ private StringBuilder getStringBuilder() { if (stringBuilder == null) { //相當于index==0, stringBuilder = new StringBuilder(); } else { stringBuilder.append(delimiter); } return stringBuilder; } @Override public String toString() { return stringBuilder == null ? "" : stringBuilder.toString(); } }
在初始化的時(shí)候指定分隔符,然后每次直接append就行了,由內部決定在何時(shí)添加分隔符。
在JDK1.8之后,提供了一個(gè)StringJoiner類(lèi),提供了類(lèi)似的功能,可以在初始化的時(shí)候指定分隔符和前綴后綴:
StringJoiner sj = new StringJoiner(",","(",")"); sj.add("a").add("b").add("c"); System.out.println(sj.toString()); //輸出:(a,b,c)
博主大致看了一下StringJoiner的實(shí)現邏輯,很簡(jiǎn)單,和咱們擴展StringBuilder基本是一樣的邏輯,另外加入了前綴后綴,然后多了一個(gè)merge的功能:
public StringJoiner merge(StringJoiner other) { Objects.requireNonNull(other); if (other.value != null) { final int length = other.value.length(); // lock the length so that we can seize the data to be appended // before initiate copying to avoid interference, especially when // merge 'this' StringBuilder builder = prepareBuilder(); builder.append(other.value, other.prefix.length(), length); } return this; }
到此這篇關(guān)于Java實(shí)用工具之StringJoiner詳解的文章就介紹到這了,更多相關(guān)Java StringJoiner內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站