2013-03-20 37 views
2

在stringbuilder中修剪为一个长度。StringBuffer setLength vs substring

我应该使用什么?

StringBuilder sb = new StringBuilder("203253/62331066       "); 
StringBuilder sb1 = new StringBuilder("203253/62331066       "); 
int newLen = Math.min(sb.length(), ACCT_LENGTH); 
sb = new StringBuilder(sb.substring(0, newLen)); 
sb1.setLength(newLen); 
System.out.println(sb); 
System.out.println(sb1); 

setLength(newLength)new StringBuildersubstring()

+0

您是否只需要'toString()'调用产生的字符串,还是需要继续使用StringBuilder? – Todd 2013-03-20 18:18:14

+0

我删除toString(),但不知道为什么问题是downvoted。这不是一个有效的问题吗? – 2013-03-20 18:30:11

+1

@would_like_to_be_anon我认为没关系。 – assylias 2013-03-20 18:31:47

回答

1

setLength更高效,因为它只是改变一个跟踪StringBuilder大小的内部计数器,而不会改变其他任何东西(假设新的长度当然更小)。

substring创建一个暗示数组副本的新字符串。

2

创建一个新的StringBuilder类会破坏使用StringBuilder的目的,而不仅仅是一个String ...即缓冲而不是创建一个新对象。所以我会投票给setLength()。

0

这取决于你打算做什么。

如果你已经完成了你的StringBuilder并且不会重新使用你打算修剪的部分,那么我想不出一个不使用setLength的好理由:它没有内存成本,而不是substring,它创建一个新实例并克隆内部字符数组。

另一方面,如果您打算继续使用初始StringBuilder的内容,但需要另一个实例来存储子字符串,那么substring是更好的选择。

具体而言,在您粘贴的代码中,您是要继续使用sb还是丢弃它并仅与sb1一起使用?如果前者,则使用substring,如果后者为setLength