Как скопировать подстроку String в StringBuilder - PullRequest
0 голосов
/ 14 марта 2020

Какой самый быстрый способ скопировать строковую подстроку в StringBuilder? Я попытался:

  • builder.append(string.substring(start, end)), но он использует две копии массива.
  • builder.append(string, start, end), но он использует для l oop вместо копии массива

К сожалению StringBuilder#getValue является частным пакетом, поэтому я не могу использовать его в String#getChars. Кроме того, StringBuilder является окончательным, что означает, что я не могу изменить доступ getValue или добавить метод append(str, start, end), который будет использовать String#getChars вместо for-l oop.

Я думаю, что что-то упустил , Я имею в виду, что не могу быть первым, кто хочет эту функцию.

Обновление:

Как заявил @Slaw, StringBuilder # append (CharSequence, int, int) был изменен использовать arraycopy вместо for-l oop где-то между 9 и 13. Я рад, что эта «проблема» была исправлена.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

использовать можно использовать конструктор StringBuilder

StringBuilder builder = new StringBuilder(string.substring(start, end));
0 голосов
/ 14 марта 2020

String реализует CharSequence, поэтому вы можете использовать StringBuffer.append(CharSequence s,int start, int end), однако я бы предупредил, что если вы не знаете, что это может быть / является проблемой, то использование этого метода вместо substring является преждевременной оптимизацией .

...