协慌网

登录 贡献 社区

如何清除或清空 StringBuilder?

在循环中使用 StringBuilder ,每隔 x 次迭代,我都希望将其清空并以一个空的StringBuilder开头,但是在文档中看不到任何类似于. NET StringBuilder.Clear的方法,只能看到delete方法,似乎过于复杂。

那么用 Java StringBuilder的最佳方法是什么?

答案

两种工作方式:

  1. 使用stringBuilderObj.setLength(0)
  2. new StringBuilder()分配一个新的而不是清除缓冲区。请注意,对于性能至关重要的代码路径,此方法可能比setLength的方法要慢得多(因为需要分配带有新缓冲区的新对象,因此旧对象可以使用 GC 等)。

基本上有两种选择,使用setLength(0)重置 StringBuilder 或在每次迭代中创建一个新的。两者都有优点和缺点,具体取决于用法。

如果您事先知道 StringBuilder 的预期容量,那么每次创建一个新的容量应该与设置新的长度一样快。它还将帮助垃圾收集器,因为每个 StringBuilder 的生存期都相对较短,并且 gc 为此进行了优化。

当您不知道容量时,重用相同的 StringBuilder 可能会更快。每次添加时超出容量时,都必须分配一个新的后备阵列,并且必须复制以前的内容。通过重复使用相同的 StringBuilder,它将在某些迭代后达到所需的容量,此后将不再进行任何复制。

delete并不太复杂:

myStringBuilder.delete(0, myStringBuilder.length());

您也可以:

myStringBuilder.setLength(0);