我事先知道,将有84个字符串将被逗号分隔符追加,然后创建一个字符串,
哪种方式更好的是固定数组,字符串或字符串生成器?
答案 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
)提供任何好处。