Let's understand what makes every lead developer say that you should know how to create your own StringBuilder if you plan to modify your strings.
And most of all - what is the difference between string concatenation vs using this pattern.
Simply put what we want to do is - an efficient management of space and performance.
This is the simplest of all the implementations with core characteristics of a StringBuilder
- .append()
- .length()
- .toString()
MyStringBuilder
import java.util.Arrays;
public class MyStringBuilder {
private static final int INIT_CAPACITY = 16;
private static final float LOAD_FACTOR = 0.75f;
private static final int MULTIPLIER = 2;
private int currentCapacity = INIT_CAPACITY;
// store the total number of characters in our string builder
private int count;
// storage area for our characters
private char[] chars;
public MyStringBuilder() {
chars = new char[INIT_CAPACITY];
}
public MyStringBuilder(String str) {
this();
append(str);
}
public MyStringBuilder append(String newStr) {
final int length = newStr.length();
// check if resized or not
boolean inflated = ensureCapacity(length);
if (inflated) {
final char[] newBuffer = new char[currentCapacity];
// copy current content
System.arraycopy(chars, 0, newBuffer, 0, count);
// copy new content
System.arraycopy(newStr.toCharArray(), 0, newBuffer, count, length);
// update the store array
chars = newBuffer;
} else {
// add the new content to the remaining array space
System.arraycopy(newStr.toCharArray(), 0, chars, count, length);
}
// update the count of chars
count += length;
return this;
}
private boolean ensureCapacity(int newLength) {
boolean isInflated = false;
// ensure the new length is properly accommodated
while (Float.compare((float) (count + newLength) / currentCapacity, LOAD_FACTOR) >= 0) {
currentCapacity *= MULTIPLIER;
isInflated = true;
}
return isInflated;
}
public int length() {
return count;
}
@Override
public String toString() {
return new String(Arrays.copyOfRange(chars, 0, count));
}
}
public class MyStringBuilderDriver {
public static void main(String[] args) {
var sb = new MyStringBuilder();
sb.append("Hi").append(" ");
sb.append("Saurabh").append(",").append(" ");
sb.append("how are you today ?");
System.out.println(sb);
System.out.println(sb.length());
}
}
If you feel it's cool - let me know which Java language framework object I should demystify.
Top comments (0)