Java中的字符串連接
一、概述
Java中的字符串連接是最常見的操作之一。在本教程中,我們將介紹一些字符串連接的方法。但是,我們將重點描述如何使用concat()
和“ +
”運算符方法。最後,我們將討論如何根據我們需要做的事情來選擇正確的。
2. 連接方法
一般來說,在 Java 中連接兩個或多個字符串有不同的方法。此外,我們將查看一些示例,並對每個示例進行說明。
2.1。使用“ +
”運算符
Java中**最常見的連接方法之一是使用“ +
”運算符**。
“ +
”運算符為字符串連接提供了比其他方法更大的靈活性。首先,它不會為空值拋出任何異常。其次,它將 null 轉換為其字符串表示形式。此外,我們可以使用它來連接兩個以上的字符串。
讓我們看一個代碼示例:
@Test
void whenUsingPlusOperatorANull_thenAssertEquals() {
String stringOne = "Hello ";
String stringTwo = null;
assertEquals("Hello null", stringOne + stringTwo);
}
編譯器在內部將“ +
”運算符轉換為StringBuilder
(或StringBuffer
)類及其append()
方法。
由於“ +
”運算符默默地將參數轉換為String
(對對象使用toString()
方法),我們避免了**NullPointerException
** 。但是,我們需要考慮我們的最終字符串結果是否適用於字符串主體中的“null”。
2.2.使用concat()
方法
String
類中的contact()
方法在當前字符串的末尾附加一個指定的字符串。它返回一個組合字符串。
讓我們測試一下這種行為:
@Test
void whenUsingConcat_thenAssertEquals() {
String stringOne = "Hello";
String stringTwo = " World";
assertEquals("Hello World", stringOne.concat(stringTwo));
}
在前面的示例中, stringOne
變量是基本字符串。使用concat()
方法, stringTwo
附加到stringOne
的末尾。 concat()
操作是不可變的,所以我們需要一個顯式賦值。下一個示例說明了這種情況:
@Test
void whenUsingConcatWithOutAssignment_thenAssertNotEquals() {
String stringOne = "Hello";
String stringTwo = " World";
stringOne.concat(stringTwo);
assertNotEquals("Hello World", stringOne); // we get only Hello
}
此外,為了在這種情況下獲得最終的連接字符串,我們需要將concat()
結果分配給一個變量:
stringOne = stringOne.concat(stringTwo);
assertEquals("Hello World", stringOne);
concat()
的另一個有用特性是當我們需要連接多個String
對象時。這種方法允許。此外,我們還可以附加空格和特殊字符:
@Test
void whenUsingConcatToMultipleStringConcatenation_thenAssertEquals() {
String stringOne = "Hello";
String stringTwo = "World";
String stringThree = ", in Jav";
stringOne = stringOne.concat(" ").concat(stringTwo).concat(stringThree).concat("@");
assertEquals("Hello World, in [email protected]", stringOne);
}
空值呢?當前字符串和要追加的字符串都不能是空值。否則, concat()
方法**會**拋出**NullPointerException
** :
@Test
void whenUsingConcatAppendANull_thenAssertEquals() {
String stringOne = "Hello";
String stringTwo = null;
assertThrows(NullPointerException.class, () -> stringOne.concat(stringTwo));
}
2.3. StringBuilder
類
首先,我們有StringBuilder
類。此類提供append()
方法來執行連接操作。下一個示例向我們展示了它是如何工作的:
@Test
void whenUsingStringBuilder_thenAssertEquals() {
StringBuilder builderOne = new StringBuilder("Hello");
StringBuilder builderTwo = new StringBuilder(" World");
StringBuilder builder = builderOne.append(builderTwo);
assertEquals("Hello World", builder.toString());
}
另一方面,類似的連接方法是StringBuffe
類。與非StringBuilder
(即非線程安全)的 StringBuilder 不同, StringBuffer
是同步的(即線程安全)。但它的性能比StringBuilder
差。它有一個append()
方法,就像StringBuilder
一樣。
2.4.字符串format()
方法
執行字符串連接的另一種方法是使用 String 類中的format()
方法。使用%s,
我們可以通過字符串值或對象連接多個字符串:
@Test
void whenUsingStringFormat_thenAssertEquals() {
String stringOne = "Hello";
String stringTwo = " World";
assertEquals("Hello World", String.format("%s%s", stringOne, stringTwo));
}
2.5. Java 8 及更高版本中的連接方法
String
類中的join()
方法,對於 Java 8 及更高版本,可以執行字符串連接。在這種情況下,此方法將在要連接的字符串之間使用的分隔符作為第一個參數:
@Test
void whenUsingStringJoin_thenAssertEquals() {
String stringOne = "Hello";
String stringTwo = " World";
assertEquals("Hello World", String.join("", stringOne, stringTwo));
}
從 Java 8 開始,添加了StringJoiner
類。此類使用分隔符、前綴和後綴連接String
。以下代碼片段是其使用示例:
@Test
void whenUsingStringJoiner_thenAssertEquals() {
StringJoiner joiner = new StringJoiner(", ");
joiner.add("Hello");
joiner.add("World");
assertEquals("Hello, World", joiner.toString());
}
此外,在 Java 8 中,通過添加 Stream API,我們可以找到收集器。 Collectors
類具有joining()
方法。此方法的工作方式類似於String
類中的join()
方法。它用於收藏。以下示例代碼片段向我們展示了它是如何工作的:
@Test
void whenUsingCollectors_thenAssertEquals() {
List<String> words = Arrays.asList("Hello", "World");
String collect = words.stream().collect(Collectors.joining(", "));
assertEquals("Hello, World", collect);
}
3. 選擇一種方法
最後,如果我們需要在concat()
方法和“ +
”運算符之間進行選擇,我們需要考慮一些方面。
首先, concat()
方法只接受字符串。同時,“ +
”運算符接受任何類型並將其轉換為字符串。另一方面, concat()
方法在 null 值上引發NullPointerExeption
,而“ +
”運算符則不是這樣。
此外,兩者之間存在性能差異。 concat()
方法比“ +
”運算符執行得更好。後者總是創建一個新字符串,而不管字符串的長度。此外,我們需要考慮到concat()
方法僅在要附加的字符串長度大於 0 時創建一個新字符串。否則,它返回相同的對象。
4。結論
在本文中,我們快速概述了 Java 中的字符串連接。此外,我們詳細討論了使用concat()
和“ +
”運算符來執行字符串連接。最後,我們對concat()
方法和“ +
”運算符以及如何在不同的上下文中選擇其中一個進行了比較分析。
與往常一樣,本文中使用的所有片段都可以在 GitHub 上找到。