字符串拼接是我们在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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。