Eu acho que uma solução mais simples e mais elegante para inserir uma String em uma determinada posição seria esta linha:
target.replaceAll("^(.{" + position + "})", "$1" + insert);
Por exemplo, para inserir uma :
String ausente no tempo:
"-0300".replaceAll("^(.{3})", "$1:");
O que ele faz é corresponder position
caracteres desde o início da sequência, agrupar e substituir o grupo por si mesmo ( $1
) seguido pela insert
sequência. Observe o replaceAll, mesmo que sempre exista uma ocorrência, porque o primeiro parâmetro deve ser uma regex.
É claro que ele não tem o mesmo desempenho que a solução StringBuilder, mas acredito que a sucessão e a elegância de uma linha única simples e mais fácil de ler (em comparação com um método enorme) são suficientes para torná-la a solução preferida na maioria dos que não são de desempenho casos de uso críticos.
Nota: Estou resolvendo o problema genérico no título por motivos de documentação; é claro que se você estiver lidando com números decimais, deverá usar as soluções específicas de domínio já propostas.
String str = Integer.toString(j); //integer or string with white spaces<br/> str = new StringBuffer(str.trim()).insert(str.length()-2, ".").toString();