美文网首页
Java Debug |你知道如何清空StringBuilder

Java Debug |你知道如何清空StringBuilder

作者: JAVA炭烧 | 来源:发表于2021-05-12 22:33 被阅读0次

提问:如何清空StringBuilder?

我在循环中使用StringBuilder,每X次迭代我都想清空它,并从一个空的StringBuilder开始,但我看不到任何类似于.NET中的StringBuilder.CLEAR方法。文档中的delete()看起来过于复杂
那么在Java中清除StringBuilder的最佳方法是什么呢?

回答一
基本上有两种选择

setLength(0)重置StringBuilder
在每次迭代中创建一个新的StringBuilder。

两者都有优点和缺点,这取决于你的用法
如果你事先知道StringBuilder的预期容量,那么每次创建一个新的StringBuilder应该和设置一个新长度一样快。它还将有助于垃圾回收,因为每个StringBuiler的寿命都相对较短,gc为此进行了优化。
如果你不知道容量时,重用同一个StringBuilder可能会更快。每次追加超出容量时,都必须分配一个新数组,并把以前的内容复制到新数组上去。通过重用StringBuilder,它将在一些迭代之后到达所需的容量,并且此后不会有任何数组复制。
回答二
我认为这里的许多答案可能缺少StringBuilder中包含的一个高质量方法:delete(int start, int end)。
现在假设你有一个变量StringBuilder table,你希望在程序中动态的修改它(我现在正在做的一个需求就这样子的)

StringBuilder table = new StringBuilder();

如果你在循环方法中希望使用StringBuilder对象,用完后清理StringBuilder以供下次使用

table.delete(int start, int end). 

开始和结束是你希望删除的字符索引,如果不知道字符长度,想删除所有内容呢?

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

StringBuilder在频繁更改时会占用大量开销,并会导致线程安全方面的问题。如果你的接口面向用户,请使用功能与StringBuilder相似的StringBuffer

class MyLogger {
    StringBuilder strBldr = new StringBuilder(256);

    public void logMsg( String stuff, SomeLogWriterClass log ) {

        // zero out strBldr's internal index count, not every
        // index in strBldr's internal buffer
        strBldr.setLength(0);

        // ... append status level
        strBldr.append("Info");

        // ... append ' ' followed by timestamp
        // assuming getTimestamp() returns a String
        strBldr.append(' ').append(getTimestamp());

        // ... append ':' followed by user message
        strBldr.append(':').append(msg);

        log.write(strBldr.toString());
    }
}

写在最后的话

今天,我们介绍了如何清空StringBuilder.你学会了吗?

想要获得更多关于StringBuilder的资料,彻底吃透,可以私信我关键词[资料],或者看下方,获取更多java相关知识.

~联系方式~
wechat: Mlzg5201314zz
扣扣:2967728282///

相关文章

网友评论

      本文标题:Java Debug |你知道如何清空StringBuilder

      本文链接:https://www.haomeiwen.com/subject/hfyzdltx.html