Java實用工具之StringJoiner詳解
背景
在平時的業(yè)務開發(fā)中,我們可能會遇到字符串列表根據(jù)分隔符進行拼接的需求。比如:
輸入:
數(shù)組:[“a”,“b”,“c”]分隔符:","輸出:
“a,b,c”
處理
通常我們可以使用StringBuilder根據(jù)下標位置決定是否需要添加分隔符以達到目的,比如:
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());
}
但是每次遇到這種情況都去這樣拼接很麻煩,而且如果使用迭代器,沒有下標就不能使用這種方法。那么就每次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));
}
所以通常情況下,我們都會去擴展一個StringBuilder以提供分隔符組裝的功能,博主平時是這樣弄的:
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;
}
/**
* 模擬的就是這個邏輯:
* 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();
}
}
在初始化的時候指定分隔符,然后每次直接append就行了,由內(nèi)部決定在何時添加分隔符。
在JDK1.8之后,提供了一個StringJoiner類,提供了類似的功能,可以在初始化的時候指定分隔符和前綴后綴:
StringJoiner sj = new StringJoiner(",","(",")");
sj.add("a").add("b").add("c");
System.out.println(sj.toString());
//輸出:(a,b,c)
博主大致看了一下StringJoiner的實現(xiàn)邏輯,很簡單,和咱們擴展StringBuilder基本是一樣的邏輯,另外加入了前綴后綴,然后多了一個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;
}
到此這篇關于Java實用工具之StringJoiner詳解的文章就介紹到這了,更多相關Java StringJoiner內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot druid數(shù)據(jù)庫連接池連接失敗后一直重連的解決方法
本文主要介紹了springboot druid數(shù)據(jù)庫連接池連接失敗后一直重連的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04
智能 AI 代碼生成工具 Cursor 安裝和使用超詳細教程
Cursor.so 是一個集成了 GPT-4 的國內(nèi)直接可以訪問的,優(yōu)秀而強大的免費代碼生成器,可以幫助你快速編寫、編輯和討論代碼,這篇文章主要介紹了智能 AI 代碼生成工具 Cursor 安裝和使用介紹,需要的朋友可以參考下2023-05-05
Spring Boot集成Spring Cloud Eureka進行服務治理的方法
本文通過詳細的步驟和代碼示例,介紹了如何在Spring Boot中集成Spring Cloud Eureka進行服務治理,通過這種方式,可以有效地管理和維護微服務架構中的服務,感興趣的朋友跟隨小編一起看看吧2024-11-11

