一、概述
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()方法和“ +”运算符以及如何在不同的上下文中选择其中一个进行了比较分析。
0 评论