Concatenating strings of equal length

Posted on

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.

Leave a Reply

Your email address will not be published. Required fields are marked *