2

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

4

3 回答 3

2

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

于 2013-03-20T18:18:29.147 回答
2

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

substring创建一个新的字符串,这意味着一个数组副本。

于 2013-03-20T18:34:39.193 回答
0

这取决于你打算做什么。

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

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

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

于 2013-03-20T18:37:59.233 回答