How to trim StringBuilder’s string? [closed]

Why does StringBuilder don’t have trim() method

  1. Because that’s the way it was designed. Try asking the designers1.
  2. Because there is not much call for it.
  3. Because the String trim() semantics and signature is a poor fit for mutable strings, though that is debatable.

Either way, the answer is not relevant to solving your problem.

and how can we trim a StringBuilder value?

The simplest way is to use StringBuilder.toString().trim()

I don’t want to use StringBuilder.toString().trim().

In that case, so you need to do what trim() does under the covers: match and remove the leading and trailing white-space. Since the StringBuilder API has no regex support, you’ll need to do this that hard way; i.e. by iterating the characters from the front forward and end backward to see what characters need to be removed, etcetera.

Are you sure you wouldn’t prefer to do it the easy way? If not, this Q&A has some example implementations, analysis, benchmarking, etcetera:

  • How to trim a java stringbuilder?

Finally, you could implement your own variation of the StringBuilder class that does have a trim() method. You could possibly use a different internal representation so that operations that remove characters at the start don’t copy characters. (I would not recommend this … but it is an option if you have a pragmatically strong need for trim().)

Actually i am in a loop where i have to compare this StringBuilder string with many other values so if i call StringBuilder.toString().trim() each time, it will create a new instance and i don’t want to create a new String object each time.

The flip-side is that removing characters from the start of a StringBuilder entails copying all of the remaining characters.

Maybe you would be better off turning the complete StringBuilder into a String to start with, then when you use trim() and substring() and the like, you won’t be copying characters2.

1 – To the people who claim it is “not constructive” to say this, the alternative is to pretend that we were in the room when the design decisions were made and we did hear the debate that occurred. But that would be a lie. Frankly, it is constructive to point out that nobody here knows the answer, and not pretend otherwise. Why? Because a lot of readers will not be aware that the Java design processes at that time were opaque.

2 – Prior to Java 7, these methods work by creating a new String that shares the backing array of the original String … so you only end up copying the string’s control information. In Java 7 they changed the implementation of trim and substring so that they used a String constructor that copies a subarray of the backing array.

Leave a Comment