Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 固定数组?/StringBuilder?/String?如果要添加84个字符串,那么创建字符串的最佳方法是什么_Java_Arrays_String_Stringbuilder - Fatal编程技术网

Java 固定数组?/StringBuilder?/String?如果要添加84个字符串,那么创建字符串的最佳方法是什么

Java 固定数组?/StringBuilder?/String?如果要添加84个字符串,那么创建字符串的最佳方法是什么,java,arrays,string,stringbuilder,Java,Arrays,String,Stringbuilder,我事先知道,将有84个字符串被逗号分隔符追加,然后创建一个字符串 固定数组、字符串或字符串生成器哪种方法更好?有很多方法可以做到这一点 我的首选方法(这可能是最好的,也可能不是最好的)是将84个字符串转换成流(使用Arrays.stream()或list.stream(),具体取决于字符串的实际存储方式),然后执行 也就是说,如果您已经有了一个数组,String.join(“,”,array)也会起作用,正如在另一个答案中所指出的那样。您也可以使用它来构建字符串。这就像使用StringBuild

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


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

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

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

也就是说,如果您已经有了一个数组,
String.join(“,”,array)
也会起作用,正如在另一个答案中所指出的那样。

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

这在以部分形式构建结果时,或者在可能忽略某些元素时非常有用。否则,与
收集器.joining()
字符串.join()
(内部使用
StringJoiner
)相比,它没有任何好处。

如果“最佳”是指“内存和/或运行时效率最高”,那么您最好使用预先分配的
StringBuilder
。(在查看了JDK中
String.join
的实现之后,它使用了
StringJoiner
,它使用了一个
StringBuilder
,默认初始容量为[16个字符],没有试图避免重新分配和复制。)

将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();
int-length=0;
for(int i=0;i
这在很大程度上取决于您的用例,如果没有对此类用例的明确定义,就无法回答。还有什么是“更好”?在什么意义上更好?您可以应用数百个度量标准。速度内存使用情况?可读性?可能吧,但这在某种程度上取决于你的用例。@Ben,我很想听听其他的情况@迈克尔,让我们称之为委婉的夸张;)@大牛不,不。一百个指标,而不是几百个解决方案!啊,我明白了。我认为这将是非常糟糕的事情,就像它只是将
String
对象连接在一起。谢谢@T.J.Crowder解释得很好。关于为什么在内部
收集器中使用StringBuilder的问题。加入
使用。但我也会这样写。