固定数组?/ 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();
我事先知道,将有 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();