我们如何对 StringBuilder
值进行修剪,而不会使用 StringBuilder.toString().trim()
导致每次修剪调用都创建一个新的 String
和/或一个新的 StringBuilder
实例所带来的开销?
实际上我现在需要一个循环,要将此 StringBuilder
字符串与许多其他值进行比较,因此如果每次调用 StringBuilder.toString().trim()
,它都会创建一个新实例,我不想每次都创建一个新的字符串对象。
另一方面,从 StringBuilder
的开头删除字符需要复制其余所有字符。
也许你最好一开始就将完整的 StringBuilder
转换为 String
,然后当你使用 trim()
、substring()
等方法时,你就不会复制字符2。
1 - 对于那些声称这样说“没有建设性”的人,替代方案是假装我们“在场”时听到了设计决策并参与了辩论。但这是虚假的。坦白地说,指出没有人知道答案,并且不假装知道,是有意义的。为什么?因为很多读者可能不知道当时的 Java 设计过程是不透明的。
2 - 在 Java 7 之前,这些方法通过创建一个新的字符串来工作,该字符串共享原始 String
的支持数组... 因此,你只需要复制字符串的控制信息。在 Java 7 中,它们改变了 trim
和 substring
的实现方式,使其使用复制支持数组的子数组的 String 构造函数。
stringbuilder.append(string.trim())
char[]
和分隔符。жџӨзњ‹java.lang.String
д»Әз ЃгЂ‚ - Martín Schonaker您可以将 StringBuilder
实例转换为 string
,然后对其进行修剪。
sb.toString().trim();//sb is stringBuilder Instance.
使用 StringBuilder.toString().trim()
,但将其保存在变量中。
例如:
String myTrimmedString = myStringBuilder.toString().trim();
它没有trim()
方法,因为使用不可变对象非常容易且有些更受欢迎。想象一下,一个线程正在修剪StringBuilder
,而另一个线程正在向其中添加内容。想象一下这可能会在您的代码中引起的错误和怪异行为。
StringBuilder.toString().trim()
吗? - Kazekage GaaratoString().trim()
。请编辑您的问题并添加先前的评论以进行澄清。 - Martín Schonakertrim()
方法,那么可能会有人问为什么?这不是一个真正的问题。 - user207421