Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to trim StringBuilder's string? [closed]

Tags:

java

c#

How can we trim a StringBuilder value without the overhead caused by using StringBuilder.toString().trim() and thereby creating a new String and/or a new StringBuilder instance for each trim call?

like image 956
Pramod Kumar Avatar asked Jun 19 '12 04:06

Pramod Kumar


People also ask

How do you trim a StringBuffer?

The trim() method of the String class initially makes a copy of the current String, removes its leading and trailing spaces and returns it. You need to convert the StringBuffer object into a String object using the toString() method. Invoke the trim() method on the result.

How do you trim the length of a String?

Java String trim()The Java String class trim() method eliminates leading and trailing spaces. The Unicode value of space character is '\u0020'. The trim() method in Java string checks this Unicode value before and after the string, if it exists then the method removes the spaces and returns the omitted string.

What trim () in String does?

Trim() Removes all leading and trailing white-space characters from the current string.

How do you remove String from a String builder?

In order to remove a substring from a Java StringBuilder Object, we use the delete() method. The delete() method removes characters in a range from the sequence. The delete() method has two parameters, start, and end. Characters are removed from start to end-1 index.


2 Answers

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.

like image 103
Stephen C Avatar answered Oct 23 '22 22:10

Stephen C


I don't know what you are trying to achieve, but if you're worried about performance perhaps you could perform the trim as you are appending to the StringBuilder.

stringbuilder.append(string.trim())

like image 6
KidTempo Avatar answered Oct 23 '22 20:10

KidTempo