Я думаю, что более простое и элегантное решение для вставки строки в определенную позицию - это одна строка:
target.replaceAll("^(.{" + position + "})", "$1" + insert);
Например, чтобы вставить отсутствующую :
в строку времени:
"-0300".replaceAll("^(.{3})", "$1:");
То, что он делает, сопоставляет position
символов в начале строки, группирует их и заменяет группу на себя ($1
), за которой следует строка insert
. Обратите внимание на replaceAll, хотя всегда есть одно вхождение, потому что первый параметр должен быть регулярным выражением.
Конечно, оно не имеет той же производительности, что и решение StringBuilder, но я считаю, что краткость и элегантность в виде простой и удобной для чтения однострочности (по сравнению с огромным методом) достаточны для того, чтобы сделать ее предпочтительным решением в большинство не критичных к производительности вариантов использования.
Примечание. Я решаю общую проблему в названии по причинам, связанным с документацией. Конечно, если вы имеете дело с десятичными числами, вам следует использовать уже предложенные решения для конкретной области.