我已经快速阅读了Java8 String api文档。
现在我对String.join()方法很好奇,以便连接/连接字符串。
这种例子让我更好地理解:
//Old way:
String str1 = "John";
String str2 = "Doe";
String result = str1 + " " +str2;
//or by using str1.concat(str2);
//New way:
String result = String.join(" ", str1, str2);
但是,我不明白我应该使用哪一个。这两个过程之间是否有任何表现或其他差异。
非常感谢任何帮助。
答案 0 :(得分:20)
String.join
依赖于类StringJoiner
,它本身依赖于内部StringBuilder
来构建连接的字符串。
因此,性能方面与使用StringBuilder
并附加到+
或使用StringBuilder
链(现在转换为String.join
操作链)非常相似由编译器)。
但+
的重要性不是String.concat
或String.split
的一般替代品,而是作为"反向操作"一个concat
操作。在这种情况下更有意义 - 当你有一堆字符串想要使用分隔符连接在一起时 - 而不是替换"a/b/c/d"
。
也就是说,当您拥有"(a+b+c+d)"
,a
,b
和c
时,可以构建类似d
或String.join
的输出数组或列表,StringJoiner
或QWidget
将使操作清晰可读。
答案 1 :(得分:2)
str1 + " " + str2
在内部转换为:
StringBuffer tmp1 = new StringBuffer();
tmp1.append(str1);
tmp1.append(" ");
String tmp2 = tmp1.toString();
StringBuffer tmp3 = new StringBuffer();
tmp3.append(tmp2);
tmp3.append(str2);
String result = tmp3.toString();
str1.concat(str2)
不会产生相同的结果,因为两个字符串之间不存在空格。
加入应该相当于
StringBuffer tmp1 = new StringBuffer();
tmp1.append(str1);
tmp1.append(" ");
tmp1.append(str2);
String result = tmp.toString();
因此更快。
答案 2 :(得分:1)
我们可以使用StringJoiner(Java8 +)
import java.util.StringJoiner;
public class StringJoinerTest {
public static final String FILESEPARATOR = ", ";
public static void main(String[] args) {
StringJoiner sj = new StringJoiner(FILESEPARATOR);
sj.add("Test1");
sj.add("Test2");
sj.add("Test3");
System.out.println(sj);
}
}
输出为
Test1, Test2, Test3