目录

+ 最常见的方式

StringBuilder.append()和StringBuffer.append()

String类下的cocat()方法

String类下的join()方法

StringUtils.join

项目中使用

不建议在 for 循环中使用 “+” 进行字符串拼接

通过字符串连接,可以将两个或多个字符串、字符、整数和浮点数等类型的数据连成一个更大的字符串。

+ 最常见的方式

“+”运算符是最简单、最快捷,也是使用最多的字符串连接方式。

在使用“+”运算符连接字符串和 int 型(或 double 型)数据时,“+”将 int(或 double)型数据自动转换成 String 类型。

StringBuilder.append()和StringBuffer.append()

先有StringBuffer后有StringBuilder,两者就像是孪生双胞胎,该有的都有,只不过大哥StringBuffer,大部分方法都经过synchronized修饰,所以StringBuffer是线程安全的,但是它效率就相对StringBuilder较低。

String类下的cocat()方法

如果拼接的字符串是null,concat会抛出NullPointerException。如果拼接的字符串是一个空字符串(“”),那么concat的效率要更高。如果拼接的字符串非常多,concat的效率就会下降,因为创建的字符串对象越多,开销越大。

str = str.concat(ing)

concat() 方法一次只能连接两个字符串,如果需要连接多个字符串,需要调用多次 concat() 方法。

String cn = "中国";
System.out.println(cn.concat("北京").concat("海淀区").concat("人民公园"));

 输出结果

中国北京海淀区人民公园

String类下的join()方法

JDK 1.8 提供了一种新的字符串拼接方法:String 类增加了一个静态方法 join。

//第一个参数为字符串连接符
String.join("","hello","world");

输出结果

helloworld

StringUtils.join

项目中处理字符串的时候,经常会用到这个类——org.apache.commons.lang3.StringUtils,该类的 join 方法是字符串拼接的一种新姿势。

String str = "hello";
String ing = "world";
StringUtils.join(str, ing);

项目中使用

前端是List<String>传过来的,保存到数据库需要用,拼接的字符串

String.join()方法,第一个参数为字符串连接符

String aaa = String.join(",",listString)

前端传List<Integer>,保存到数据库是用,拼接的字符串

String aaa = listInteger.stream.map(String::valueOf).collect(Collectors.joining(","))

数据库是用,拼接的一个字段,转到前端List<String>

List<String>listString = Array.asList(itemString.spit(","));

数据库是字符串的数字,"1,2,3",传给前端需要是List<Integer>

List<Integer> listInteger = (Arrays.asList(itemString.split(",")).stream().map(Integer::parseInt).collect(Collectors.toList()));

不建议在 for 循环中使用 “+” 进行字符串拼接

第一段,for 循环中使用 “+” 操作符。

String result = "";
for (int i = 0; i < 100000; i++) {
 result += "六六六";
}

第二段,for 循环中使用 append。

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
 sb.append("六六六");
}

这两段代码分别会耗时测试结果如下:
①第一段代码执行完的时间为 6212 毫秒
②第二段代码执行完的时间为 1 毫秒

第一段的 for 循环中创建了大量的 StringBuilder 对象,而第二段代码至始至终只有一个 StringBuilder 对象。所以不建议在 for 循环中使用 “+” 进行字符串拼接。