В общем, если вы запустите это на больших данных, такой код может быть проблематичным, это, конечно, зависит от ваших потребностей.
В целом, было бы неплохо использовать класс StringBuilder , который позволит вам работать со строками «более изменчивым» способом без снижения производительности, например, удалить с его начала без перераспределения всей строки .
Однако в вашем примере я хотел бы выбросить извести, которая берет подстроку из оригинала и заменяет ее некоторым кодом, который обновит некоторые индексы, указывающие, откуда вы должны получить новую подстроку. Тогда while условие будет просто проверять, будет ли ваш индекс в конце строки, а ваш временный метод будет принимать подстроку не от 0 до 14, а от i, где i будет этим индексом.
Однако - не оптимизируйте код, если вам не нужно, я предполагаю, что вам нужно больше производительности и вы хотите пожертвовать временем и / или написать немного менее понятный код для большей эффективности.