我在循环中使用了一个StringBuilder,每x次迭代我都想清空它,并从一个空的StringBuilder开始,但我看不到任何类似于. net StringBuilder的方法。在文档中很清楚,只有delete方法看起来太复杂了。
那么在Java中清理StringBuilder的最佳方法是什么呢?
我在循环中使用了一个StringBuilder,每x次迭代我都想清空它,并从一个空的StringBuilder开始,但我看不到任何类似于. net StringBuilder的方法。在文档中很清楚,只有delete方法看起来太复杂了。
那么在Java中清理StringBuilder的最佳方法是什么呢?
当前回答
你应该使用sb.delete(0, sb.length())或sb.setLength(0)而不是创建一个新的StringBuilder()。
关于性能,请参阅相关文章:在循环中重用StringBuilder更好吗?
其他回答
你应该使用sb.delete(0, sb.length())或sb.setLength(0)而不是创建一个新的StringBuilder()。
关于性能,请参阅相关文章:在循环中重用StringBuilder更好吗?
有两种方法:
使用stringBuilderObj.setLength(0)。 使用new StringBuilder()分配一个新的缓冲区,而不是清除缓冲区。注意,对于性能关键的代码路径,这种方法可能比基于setlength的方法慢得多(因为需要分配具有新缓冲区的新对象,旧对象就可以用于GC等)。
删除并不太复杂:
myStringBuilder.delete(0, myStringBuilder.length());
你还可以:
myStringBuilder.setLength(0);
如果您查看StringBuilder或StringBuffer的源代码,setLength()调用只是重置字符数组的索引值。恕我直言,使用setLength方法总是比新分配更快。他们应该将方法命名为“clear”或“reset”,这样会更清楚。
我投票给sb.setLength(0);不仅因为它是一个函数调用,还因为它实际上没有将数组复制到另一个数组中,比如sb.delete(0, builder.length());。它只是将剩余的字符填充为0,并将长度变量设置为新的长度。
您可以查看它们的实现,以验证我在setLength函数和delete0函数中的观点。