Вы можете получить те же результаты, но на самом деле здесь есть несколько проблем с эффективностью ...
Для удаления по заданному индексу достаточно одной простой проверки этого индекса, в то время как при удалении диапазона индексов необходимо еще несколько.
Убедитесь сами:
public AbstractStringBuilder delete(int start, int end)
{
if (start < 0)
throw new StringIndexOutOfBoundsException(start);
if (end > count)
end = count;
if (start > end)
throw new StringIndexOutOfBoundsException();
int len = end - start;
if (len > 0) {
System.arraycopy(value, start+len, value, start, count-end);
count -= len;
}
return this;
}
По сравнению с:
public AbstractStringBuilder deleteCharAt(int index)
{
if ((index < 0) || (index >= count))
throw new StringIndexOutOfBoundsException(index);
System.arraycopy(value, index+1, value, index, count-index-1);
count--;
return this;
}
Поэтому, если вам нужно удалить только один символ, вам лучше использовать deleteCharAt и сохранить несколько проверок. Тем не менее, если вы хотите удалить более 1 последовательного символа, предпочтите использовать delete, чтобы был выполнен только один вызов arraycopy и проверки не повторялись при каждом вызове deleteCharAt:)