在 Java 開發中,我們經常需要將多個字元串拼接成一個字元串,比如拼接 URL、拼接 JSON 或者 XML 數據。在過去,我們可以使用字元串拼接符 + 或者 StringBuilder/ StringBuffer 類來實現字元串拼接。然而,自從 Java 8 引入了 StringJoiner 和 String.join() 方法之後,我們可以更加方便地進行字元串拼接操作。這篇文章將圍繞 Java String Join 進行詳細闡述,從各個方面分析其使用方法和優點。
一、String.join() 函數介紹
Java 8 引入了 String.join() 方法,該方法允許我們使用指定的 delimiter(定界符)作為分隔符,將字元串數組中的所有元素連接起來。具體的用法如下:
String str = String.join("-", "Java", "is", "cool"); System.out.println(str); // Java-is-cool
上面的代碼使用「-」作為分隔符,將字元串數組 {“Java”, “is”, “cool”} 中的所有元素連接起來,得到結果 「Java-is-cool」。
下面我們來看一下 String.join() 方法的一些細節:
1. 可以很方便地合併字元串列表
String.join() 方法也可以接收一個字元串列表,這樣使用起來更加方便了:
List list = Arrays.asList("Java", "is", "cool"); String str = String.join("-", list); System.out.println(str); // Java-is-cool
2. delimiter 參數可以為空
如果你不想使用分隔符,那麼直接將該參數留空即可:
String str = String.join("", "Java", "is", "cool"); System.out.println(str); // Javaiscool
3. 只有一個參數的時候,不會添加分隔符
如果只有一個字元串參數,那麼 String.join() 方法不會添加分隔符:
String str = String.join("-", "Java"); System.out.println(str); // Java
4. 不僅僅能用在字元串上,也能用在字元上
String.join() 方法不僅僅能被用於字元串數組上,還能被用於字元數組、集合以及其他容器對象上:
char delimiter = '-'; char[] charArray = new char[]{'J', 'a', 'v', 'a'}; String str = String.join("-", Character.toString(delimiter), Character.toString(charArray)); System.out.println(str); // -J-a-v-a-
5. String.join(CharSequence delimiter, Iterable elements) 返回一個 String 對象
String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements) 方法返回一個 String 對象,即字元串連接成的結果,如下代碼所示:
List list = Arrays.asList("Java", "is", "cool"); String str = String.join("-", list); System.out.println(str); // Java-is-cool
二、使用 StringJoiner 類型拼接字元串
StringJoiner 是 Java 8 中專門用來拼接字元串的工具類,可以方便地將多個字元串拼接成一個字元串。StringJoiner 實例化時需要傳入定界符、前綴和後綴。這些參數都是可選的。
1. 僅含定界符 join
以下代碼展示了如何僅包含一個定界符的例子:
StringJoiner sj = new StringJoiner(","); sj.add("Java"); sj.add("is"); sj.add("cool"); String result = sj.toString(); // Java,is,cool
2. 包含前綴和後綴 join
以下代碼展示了如何包含定界符、前綴以及後綴的例子:
StringJoiner sj = new StringJoiner(", ", "{", "}"); sj.add("Java"); sj.add("is"); sj.add("cool"); String result = sj.toString(); // {Java, is, cool}
3. 多種樣式的 StringJoiner
StringJoiner 還支持多種不同風格的操作,包括:
- 忽略空值
- 自定義 null 值替換
- 自定義開頭和結尾組成的字元串
示例代碼如下:
StringJoiner sj = new StringJoiner(","); sj.setEmptyValue("default"); // 當元素列表為空時,顯示默認值 sj.add(""); sj.add("Java"); sj.add("is"); sj.add(null); sj.add("cool"); String result = sj.toString(); // ,Java,is,,cool
三、使用 StringBuilder/ StringBuffer 進行字元串拼接
在 Java 中,StringBuilder 和 StringBuffer 是用來處理可變字元串的兩個類。它們的本質區別是 StringBuffer 是線程安全的,而 StringBuilder 是線程不安全的,但 StringBuilder 的性能更優。這兩個類的常用方法基本相似,都有 append 和 insert 等方法。
1. 使用 StringBuilder 進行字元串拼接
以下代碼展示了如何使用 StringBuilder 進行字元串拼接:
StringBuilder sb = new StringBuilder(); sb.append("Java"); sb.append(" is"); sb.append(" cool"); String result = sb.toString(); // Java is cool
2. 使用 StringBuffer 進行字元串拼接
以下代碼展示了如何使用 StringBuffer 進行字元串拼接:
StringBuffer sb = new StringBuffer(); sb.append("Java"); sb.append(" is"); sb.append(" cool"); String result = sb.toString(); // Java is cool
3. StringBuilder 與 StringBuffer 的性能比較
StringBuilder 的性能比 StringBuffer 更優,但由於 StringBuffer 是線程安全的,所以在多線程場景下更加安全。下面是一個簡單的性能比較示例:
long startTime = System.nanoTime(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 100000; i++) { sb.append(i); } String result = sb.toString(); // 生成最終字元串 long endTime = System.nanoTime(); long duration = endTime - startTime; System.out.println("StringBuilder: " + duration); startTime = System.nanoTime(); StringBuffer sbf = new StringBuffer(); for (int i = 0; i < 100000; i++) { sbf.append(i); } result = sbf.toString(); // 生成最終字元串 endTime = System.nanoTime(); duration = endTime - startTime; System.out.println("StringBuffer: " + duration);
以上代碼統計了使用 StringBuilder 和 StringBuffer 分別拼接 100000 次的時間。根據測試結果,StringBuilder 的耗時是 StringBuffer 的 1/4 左右。
四、Java StringJoiner 和 String.join() 的性能比較
下面是一個簡單的性能比較示例,比較了使用 Java StringJoiner 和 String.join() 的拼接性能差異:
long startTime = System.nanoTime(); StringJoiner sj = new StringJoiner("-"); for (int i = 0; i < 100000; i++) { sj.add("Java"); sj.add("is"); sj.add("cool"); } String result = sj.toString(); // 生成最終字元串 long endTime = System.nanoTime(); long duration = endTime - startTime; System.out.println("StringJoiner: " + duration); startTime = System.nanoTime(); String str = ""; for (int i = 0; i < 100000; i++) { str += "Java" + "-" + "is" + "-" + "cool"; } result = str.toString(); // 生成最終字元串 endTime = System.nanoTime(); duration = endTime - startTime; System.out.println("String: " + duration);
從測試結果可以看出,使用 Java StringJoiner 更加高效。
總結
通過本文的介紹和示例代碼,我們可以看到 Java String Join 帶來的方便和效率。在大多數情況下,String.join() 和 StringJoiner 可以滿足我們的需求,並且對性能的影響是可忽略的。而在特別複雜的字元串拼接場景中,我們可以選擇使用 StringBuilder 和 StringBuffer。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238476.html