在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 StringBuilder
与substring()
?
答案 0 :(得分:2)
创建一个新的StringBuilder会破坏使用StringBuilder的目的,而不仅仅是一个String ...即缓冲而不是创建一个新对象。所以我会投票给setLength()。
答案 1 :(得分:2)
setLength
更有效率,因为它只是更改一个跟踪StringBuilder大小的内部计数器而不改变任何其他内容(假设新长度当然较小)。
substring
创建一个新的String,它意味着一个数组副本。
答案 2 :(得分:0)
这取决于你打算做什么。
如果您已完成StringBuilder
并且不会重复使用您打算修剪的部分,那么我无法想出不使用setLength
的好理由:它没有内存成本,而substring
创建一个新实例并克隆内部字符数组。
另一方面,如果您打算继续使用初始StringBuilder
的内容但需要另一个实例来存储子字符串,那么substring
是更好的选择。
具体而言,在您粘贴的代码中,您是继续使用sb
还是弃用它并仅使用sb1
?如果是前者,请使用substring
,如果是后者setLength
。