,,Java中拼接字符串String的N种方法总结

,,Java中拼接字符串String的N种方法总结

字符串拼接是我们在Java代码中经常做的事情,就是将多个字符串拼接在一起。下面这篇文章主要介绍Java中拼接字符串的N种方法,通过示例代码详细介绍。有需要的朋友可以参考一下。

:

目录

1.前言2。问题重现3。使用运算符4。使用String.concat()5。使用StringBuilder6。使用StringJoiner类(Java 8 )7。使用Streams.filter (Java 8 )8。总结。

1. 前言

Java提供了很多拼接字符串的方法,但是有时候如果不注意空字符串,可能会把null拼接到结果中,这显然不是我们想要的。

在本文中,我们将介绍一些在拼接字符串时避免空值的方法。

2. 问题复现

如果我们想要拼接字符串数组,我们可以简单地使用操作符来拼接它们,但是我们可能会遇到空值。

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

字符串结果=“”;

for(字符串值:值){

结果=结果值;

}

这将把所有元素拼接成结果字符串,如下所示:

https://www.wdbyte.comnull

但是我们发现了问题,最后一个空值被拼接成了字符串,这显然不是我们想要的。

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

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

String result=String.join(' ',values);

//output:https://www . wd byte . com null

让我们来看看一些防止空值被拼接的方法。我的预期输出应该是:

https://www.wdbyte.com

3. 使用 + 运算符

加法是可以拼接字符串的,所以我们只需要在拼接的时候做null判断,然后就可以用空字符串替换null值了。

for(字符串值:值){

结果=结果(值==null?‘:值);

}

但是我们知道string是一个不可变的对象,使用symbol会频繁地创建string对象,每次都会在内存中创建一个新的String,所以使用symbol拼接String的性能消耗是非常高的。

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

公共字符串nullToString(字符串值){

返回值==null?“”:值;

}

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

for(字符串值:值){

result=result null tostring(value);

}

4. 使用 String.concat()

String.concat()是String类附带的一个方法。用这种方法拼接琴弦非常方便。

for(字符串值:值){

result=result . concat(getNonNullString(value));

}

因为调用了nullToString()方法,所以结果中没有空值。

5. 使用 StringBuilder

StringBuilder类提供了许多有用且方便的方法来构建字符串。其中,append()方法是常用的。append()用于拼接字符串,nullToString()方法用于避免空值。

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

StringBuilder result=new StringBuilder();

for(字符串值:值){

result=result . append(nullToString(value));

}

可以获得以下结果:

https://www.wdbyte.com

6. 使用 StringJoiner 类 (Java 8+)

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

还使用nullToString()方法来避免空值。

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

string joiner result=new string joiner(');

for(字符串值:值){

result=result . add(nullToString(value));

}

7. 使用 Streams.filter (Java 8+)

Stream API是Java 8推出的一个强大的流操作类,可以执行过滤、映射、遍历、分组、统计等常见操作。filter操作filter可以接收一个predict函数,predict函数接口是和前面介绍的function(打开新窗口)接口一样的函数接口,可以接受一个返回值为Boolean类型的泛型T参数。谓词通常用于数据过滤。

因此,我们可以定义一个谓词来检查空字符串,然后将其传递给Stream API的filter()方法。

最后,使用Collectors.joining()方法拼接剩余的非空字符串。

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

字符串结果=Arrays.stream(值)。过滤器(对象:非空)。collect(collectors . joining());

8. 总结

本文介绍了几种拼接非空字符串的方法。不同的方式可能适合不同的场景。但是,需要注意的是,拼接字符串是一项开销很大的操作。以下是使用JMH对几种拼接方式进行基准测试的结果。

基准模式计数分数误差单位

StringConcat.operateAdd和thrpt 25 13635005.992 549759.774操作/秒

StringConcat。string . concat thrpt 25 7465193.417 667928.552操作/秒

StringConcat。StringBuilder thrpt 25 13949781.608 142001.421操作/秒

StringConcat。string joiner thrpt 25 950 205.473 21 1977.433 ops/s

StringConcat。stream filter thrpt 25 899896.107 649033.722操作/秒

可以看出,StringBuilder的性能最好。在实际使用中,要结合具体场景,再选择性能开销最低的方法。

一如既往,文章中的代码存储在:github.com/niumoo/Java…

这就是这篇关于Java中拼接字符串的n种方法的文章。有关Java拼接字符串方法的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: