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

Fixed Array?/ StringBuilder?/ String? which is best way to create a string, if 84 strings to be appended

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

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

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

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

也就是说,如果您已经有一个数组,String.join(",", array) 也可以解决问题,如另一个答案中所述。

您也可以使用 StringJoiner 来构建字符串。这就像使用 StringBuilder,但您不必担心逗号(如果需要,您甚至可以附加和前置一个值)。

这主要在您分段构建结果或可能省略某些元素时有用。否则它与 Collectors.joining()String.join()(无论如何在内部使用 StringJoiner)相比没有任何好处。

如果 "best" 你的意思是 "most memory and/or runtime efficient" 那么你最好使用预先分配的 StringBuilder。 (查看了 JDK 中 String.join 的实现,它使用 StringJoiner,它使用具有默认初始容量 [16 个字符] 的 StringBuilder,没有试图避免重新分配和复制。)

您将计算 84 个字符串的长度,加上逗号的数量,创建一个具有该长度的 StringBuilder,将它们全部相加,然后调用 toString。例如:

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();