StringBuffer setLength vs substring

时间:2013-03-20 18:13:41

标签: java string substring stringbuilder

在stringbuilder中剪裁到一个长度。

我应该使用什么?

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()

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

substring创建一个新的String,它意味着一个数组副本。

答案 2 :(得分:0)

这取决于你打算做什么。

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

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

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