code: public Joiner merge(Joiner other) {
          N.checkArgNotNull(other);
          if (other.buffer != null) {
              final int length = other.buffer.length();
              // lock the length so that we can seize the data to be appended
              // before initiate copying to avoid interference, especially when
              // merge 'this'
              StringBuilder builder = prepareBuilder();
              builder.append(other.buffer, other.prefix.length(), length);
          }
          return this;
      }
docs: Adds the contents of the given {@code StringJoiner} without prefix and
  suffix as the next element if it is non-empty. If the given {@code
  StringJoiner} is empty, the call has no effect.
  
  <p>A {@code StringJoiner} is empty if {@link #addAll(CharSequence) add()}
  has never been called, and if {@code merge()} has never been called
  with a non-empty {@code StringJoiner} argument.
  
  <p>If the other {@code StringJoiner} is using a different delimiter,
  then elements from the other {@code StringJoiner} are concatenated with
  that delimiter and the result is appended to this {@code StringJoiner}
  as a single element.
  
  @param other The {@code StringJoiner} whose contents should be merged
  into this one
  @throws NullPointerException if the other {@code StringJoiner} is null
  @return This {@code StringJoiner}