История изменений
Исправление 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 функций замены последовательно в цикл и смотрел время выполнения каждой и долю времени.