Problem
My problem is this: Given two strings, append them together and return the result. However, if the strings are different lengths, omit chars from the longer String
so it is the same length as the shorter String
. So “Hello” and “Hi” yield “loHi”. The strings may be any length.
Is there a way to do it without using of StringBuilder
like me:
public String equalConcatenation(String a, String b) {
if(a.length() > b.length()){
StringBuilder sb = new StringBuilder(a);
sb.delete(0, (a.length() - b.length()));
return sb.toString() + b;
}
StringBuilder sb = new StringBuilder(b);
sb.delete(0, (b.length() - a.length()));
return a + sb.toString();
}
Solution
You’re not using StringBuilder
effectively. If you already have sb
, then why not do sb.append(b).toString()
instead of sb.toString() + b
? If you look at the generated bytecode for sb.toString() + b
, you’ll see that it actually makes another StringBuilder
for you, like new StringBuilder(sb.toString()).append(b).toString()
.
I would write it this way instead, with no special cases:
public static String equalConcatentation(String a, String b) {
int len = Math.min(a.length(), b.length());
return a.substring(a.length() - len) +
b.substring(b.length() - len);
}
I’ve chosen to make it a static method because it’s purely a function of the two input strings, not using any object state.