StringBuffer.delete(int,int) has a bug:
System.arraycopy(str, end-1, str, start, end-start);
should be:
System.arraycopy(str, end, str, start, len - start );
It appears that someone didn't fully understand how to use arraycopy as this
is the 2nd bug I've found that uses arraycopy.

