3

#yyds干货盘点#Java中拼接String的几种方式

 1 year ago
source link: https://blog.51cto.com/u_11365839/5714405
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

#yyds干货盘点#Java中拼接String的几种方式

精选 原创

尼羲 2022-09-26 22:14:15 博主文章分类:技术扯淡 ©著作权

文章标签 字符串 拼接字符串 java 文章分类 Java 编程语言 yyds干货盘点 阅读数199

Java 提供了拼接 String 字符串的多种方式,不过有时候如果我们不注意 ​​null​​​ 字符串的话,可能会把 ​​null​​ 拼接到结果当中,很明显这不是我们想要的。

在这篇文章中,将介绍一些在拼接 String 时避免 ​​null​​ 值的几种方式。

如果我们想要拼接 String 数组,可以简单的使用 ​​+​​ 运算符进行拼接,但是可能会遇到 ​​null​​ 值。

String[] values = {"https", "://", "www.", "wdbyte", ".com", null};
String result = "";

for (String value : values) {
result = result + value;
}

这会将所有元素拼接到结果字符串中,如下所示:

https://www.wdbyte.comnull

但是,我们已经发现问题了,最后的 ​​null​​ 值作为字符串也拼接了下来,这显然不是我们想要的。

同样,即使我们在 Java 8 或更高版本上运行,然后使用​ ​String.join()​​​) 静态方法拼接字符串,一样会得到带有 ​​null​​ 值的输出。

String[] values = {"https", "://", "www.", "wdbyte", ".com", null};
String result = String.join("", values);
// output: https://www.wdbyte.comnull

下面看看一些可以避免 ​​null​​ 值被拼接下来的方法,我的期待的输出结果应该是:

https://www.wdbyte.com

使用 + 运算符

加法符号 ​​+​​ 可以拼接 String 字符串,那么我们只需要在拼接时进行 ​​null​​ 判断就可以把 ​​null​​ 值替换为空字符串了。

for (String value : values) {
result = result + (value == null ? "" : value);
}

然而,我们知道 String 是一个不可变对象,使用 ​​+​​​ 号会频繁的创建字符串对象,每次都会在内存中创建一个新的字符串,所以使用 ​​+​​ 符号来拼接字符串的性能消耗是很高的。

为了方便后续的代码演示,我们抽取一个可以传入字符串,返回一个非 null 字符串的方法。

public String nullToString(String value) {
return value == null ? "" : value;
}

因此上面的代码可以改为调用这个方法:

for (String value : values) {
result = result + nullToString(value);
}

使用 String.concat()

 ​String.concat()​​) 是 String 类自带的一个方法,使用这种方式拼接字符串十分方便。

for (String value : values) {
result = result.concat(getNonNullString(value));
}

因为调用了 ​​nullToString()​​ 方法,因此得到的结果中没有 ​​null​​ 值。

使用 StringBuilder

StringBuilder 类提供了很多有用且方便的 String 构建方法。其中比较常用的是 ​​append()​​ 方法,使用 ​​append()​​ 来拼接字符串,同时结合 ​​nullToString()​​ 方法来避免 ​​null​​ 值。

String[] values = {"https", "://", "www.", "wdbyte", ".com", null};
StringBuilder result = new StringBuilder();
for (String value : values) {
result = result.append(nullToString(value));
}

可以得到如下结果:

https://www.wdbyte.com

使用 StringJoiner 类 (Java 8+)

​StringJoiner 类提供了更强大的字符串拼接功能,不仅可以指定拼接时的分隔符,还可以指定拼接时的前缀和后缀,这里我们可以使用它的 ​​​add()​​方法来拼接字符串。

同样的会用 ​​nullToString()​​ 方法来避免 ​​null​​ 值。

String[] values = {"https", "://", "www.", "wdbyte", ".com", null};
StringJoiner result = new StringJoiner("");
for (String value : values) {
result = result.add(nullToString(value));
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK