LINUX.ORG.RU

История изменений

Исправление Sadler, (текущая версия) :

Не принципиально — replace и replaceAll внутри работают через regexp'ы. Самое эффективное тут решение было бы просто пройтись циклом и заменить в нем нужные символы в один проход.

Да, я так в своей реализации и делал. Там основной расход времени у меня был на StringBuilder.append, т.к. я тупо каждый символ append'ил отдельно, что не очень быстро.

чем изменял, jmh?

Да просто профилировщиком NetBeans'а. Загнал 5 функций замены последовательно в цикл и смотрел время выполнения каждой и долю времени.

Только что придумал ещё одну очень эффективную реализацию:

String.join(to, input.split(from))

У меня работает почти так же быстро, как апачевская реализация. Возможно, я чего-то ещё не учитываю, конечно.

Исправление Sadler, :

Не принципиально — replace и replaceAll внутри работают через regexp'ы. Самое эффективное тут решение было бы просто пройтись циклом и заменить в нем нужные символы в один проход.

Да, я так в своей реализации и делал. Там основной расход времени у меня был на StringBuilder.append, т.к. я тупо каждый символ append'ил отдельно, что не очень быстро.

чем изменял, jmh?

Да просто профилировщиком NetBeans'а. Загнал 5 функций замены последовательно в цикл и смотрел время выполнения каждой и долю времени.

Только что придумал ещё одну очень эффективную реализацию:

String.join(to, input.split(from))

Исходная версия Sadler, :

Не принципиально — replace и replaceAll внутри работают через regexp'ы. Самое эффективное тут решение было бы просто пройтись циклом и заменить в нем нужные символы в один проход.

Да, я так в своей реализации и делал. Там основной расход времени у меня был на StringBuilder.append, т.к. я тупо каждый символ append'ил отдельно, что не очень быстро.

чем изменял, jmh?

Да просто профилировщиком NetBeans'а. Загнал 5 функций замены последовательно в цикл и смотрел время выполнения каждой и долю времени.