志在指尖
用双手敲打未来

字符串拼接(Java字符串拼接的几种方式)

字符串拼接

publicclassTest{
publicstaticvoidmain(String[]args){
Strings1=”Hello”;
Strings2=”word”;
Strings3=”!”;
//StringBuffer下面的append方法拼接字符串————拼接字符串方法1
StringBufferbuffer=newStringBuffer();
StringBufferappend=buffer.append(s1).append(“”).append(s2).append(s3);
Strings4=newString(append);
//String下面的format方法拼接字符串————拼接字符串方法2
Strings=String.format(“%s%s%s”,s1,s2,s3);
//拼接字符串方法3
Strings5=s1+””+s2+s3;
System.out.println(s4);
System.out.println(s);
System.out.println(s5);
}
}s
/*输出结果:
方法一:Helloword!
方法二:Helloword!
方法三:Helloword!
*/Java

Java字符串拼接的几种方式

Java供给了拼接String字符串的多种办法,不过有时候假如咱们不注意null字符串的话,或许会把null拼接到成果当中,很明显这不是咱们想要的。
在这篇文章中,将介绍一些在拼接String时避免null值的几种办法。
2.问题复现
假如咱们想要拼接String数组,能够简略的运用+运算符进行拼接,但是或许会遇到null值。
String[]values={“https”,”://”,”www.”,”wdbyte”,”.com”,null};
Stringresult=””;
for(Stringvalue:values){
result=result+value;
}
这会将所有元素拼接到成果字符串中,如下所示:
1
https://www.wdbyte.comnull
但是,咱们已经发现问题了,最终的null值作为字符串也拼接了下来,这显然不是咱们想要的。
相同,即使咱们在Java8或更高版本上运行,然后运用String.join()静态办法拼接字符串,相同会得到带有null值的输出。
String[]values={“https”,”://”,”www.”,”wdbyte”,”.com”,null};
Stringresult=String.join(“”,values);
//output:https://www.wdbyte.comnull
下面看看一些能够避免null值被拼接下来的办法,我的等待的输出成果应该是:
https://www.wdbyte.com
3.运用+运算符
加法符号+能够拼接String字符串,那么咱们只需要在拼接时进行null判别就能够把null值替换为空字符串了。
for(Stringvalue:values){
result=result+(value==null?””:value);
}
但是,咱们知道String是一个不可变对象,运用+号会频繁的创立字符串对象,每次都会在内存中创立一个新的字符串,所以运用+符号来拼接字符串的功能消耗是很高的。
为了便利后续的代码演示,咱们抽取一个能够传入字符串,回来一个非null字符串的办法。
publicStringnullToString(Stringvalue){
returnvalue==null?””:value;
}
因而上面的代码能够改为调用这个办法:
for(Stringvalue:values){
result=result+nullToString(value);
}
4.运用String.concat()
String.concat()是String类自带的一个办法,运用这种办法拼接字符串十分便利。
for(Stringvalue:values){
result=result.concat(getNonNullString(value));
}
因为调用了nullToString()办法,因而得到的成果中没有null值。
5.运用StringBuilder
StringBuilder类供给了许多有用且便利的String构建办法。其间比较常用的是append()办法,运用append()来拼接字符串,一起结合nullToString()办法来避免null值。
String[]values={“https”,”://”,”www.”,”wdbyte”,”.com”,null};
StringBuilderresult=newStringBuilder();
for(Stringvalue:values){
result=result.append(nullToString(value));
}
能够得到如下成果:
https://www.wdbyte.com
6.运用StringJoiner类(Java8+)
StringJoiner类供给了更强壮的字符串拼接功能,不只能够指定拼接时的分隔符,还能够指定拼接时的前缀和后缀,这里咱们能够运用它的add()办法来拼接字符串。
相同的会用nullToString()办法来避免null值。
String[]values={“https”,”://”,”www.”,”wdbyte”,”.com”,null};
StringJoinerresult=newStringJoiner(“”);
for(Stringvalue:values){
result=result.add(nullToString(value));
}
7.运用Streams.filter(Java8+)
StreamAPI是Java8引进的功能强壮的流式操作类,能够进行常见的过滤、映射、遍历、分组、计算等操作。其间的过滤操作filter能够接纳一个Predicate函数,Predicate函数接口同之前介绍的Function(opensnewwindow)接口相同,是一个函数式接口,它能够承受一个泛型参数,回来值为布尔类型,Predicate常用于数据过滤。
因而,咱们能够定义一个Predicate来查看为null的字符串,然后传递给StreamAPI的filter()办法。
最终再运用Collectors.joining()办法拼接剩下的非null字符串。
String[]values={“https”,”://”,”www.”,”wdbyte”,”.com”,null};
Stringresult=Arrays.stream(values)
.filter(Objects::nonNull)
.collect(Collectors.joining());
8.总结
这篇文章介绍了拼接非null字符串的几种办法,不同的办法或许合适不同的场景,不过要注意拼接String字符串是一项昂贵的操作,下面是运用JMH对几种拼接办法进行基准测试的成果。
BenchmarkModeCntScoreErrorUnits
StringConcat.operateAddthrpt2513635005.992±549759.774ops/s
StringConcat.String.concatthrpt257465193.417±667928.552ops/s
StringConcat.StringBuilderthrpt2513949781.608±142001.421ops/s
StringConcat.StringJoinerthrpt259502405.473±211977.433ops/s
StringConcat.StreamFilterthrpt258998396.107±649033.722ops/s
能够看到StringBuilder的功能是最好的,实际运用时要结合具体场景,然后选择最低的功能开销办法。

未经允许不得转载:IT技术网站 » 字符串拼接(Java字符串拼接的几种方式)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载