固定数组?/ StringBuilder?/ String?如果要追加84个字符串,这是创建字符串的最佳方法

时间:2018-05-14 08:30:07

标签: java arrays string stringbuilder

我事先知道,将有84个字符串将被逗号分隔符追加,然后创建一个字符串,

哪种方式更好的是固定数组,字符串或字符串生成器?

3 个答案:

答案 0 :(得分:6)

如果是" best"你的意思是"大多数内存和/或运行时效率"然后你可能最好用预先分配的StringBuilder。 (看过JDK中String.join的实现,它使用StringJoiner,它使用StringBuilder和默认的初始容量[16个字符],但没有试图避免重新分配和复制。 )

您总结了84个字符串的长度,添加逗号数量,创建一个具有该长度的StringBuilder,将它们全部添加,并在其上调用toString。 E.g:

int length = 0;
for (int i = 0; i < strings.length; ++i) {
    length += strings[i].length();
}
length += strings.length - 1; // For the commas
StringBuilder sb = new StringBuilder(length);
sb.append(strings[0]);
for (int i = 1; i < strings.length; ++i) {
    sb.append(',');
    sb.append(strings[i]);
}
String result = sb.toString();

答案 1 :(得分:3)

有很多方法可以做到这一点。

我这样做的首选方法(可能是也可能不是最好)将我的84个字符串转换为一个流(Arrays.stream()list.stream(),具体取决于字符串的实际存储方式)然后做Collectors.joining(",")

也就是说,如果你已经拥有一个数组,那么String.join(",", array)也可以做到这一点,如另一个答案中所述。

答案 2 :(得分:0)

您还可以使用StringJoiner来构建String。这就像使用StringBuilder,但您不必担心逗号(如果需要,您甚至可以追加并添加一个值。)

当您在部件中构建结果或者可能省略某些元素时,这非常有用。否则,它不会对Collectors.joining()String.join()(内部使用StringJoiner)提供任何好处。