Myślę, że prostszym i bardziej eleganckim rozwiązaniem, aby wstawić String w określonej pozycji, byłoby to jednowierszowe:
target.replaceAll("^(.{" + position + "})", "$1" + insert);
Na przykład, aby wstawić brakujący :
ciąg znaków czasu:
"-0300".replaceAll("^(.{3})", "$1:");
To, co robi, polega na dopasowywaniu position
znaków z początku ciągu, grupowaniu tych znaków i zastępowaniu grupy samą sobą ( $1
), po której następuje insert
ciąg. Uważaj na replaceAll, nawet jeśli zawsze występuje jedno wystąpienie, ponieważ pierwszy parametr musi być wyrażeniem regularnym.
Oczywiście nie ma takiej samej wydajności, jak rozwiązanie StringBuilder, ale uważam, że zwięzłość i elegancja jako prosta i łatwiejsza do odczytania jedna linijka (w porównaniu do ogromnej metody) jest wystarczająca, aby uczynić ją preferowanym rozwiązaniem w większości przypadków braku wydajności -krytyczne przypadki użycia.
Uwaga Rozwiązuję ogólny problem w tytule ze względów dokumentacyjnych, oczywiście jeśli masz do czynienia z liczbami dziesiętnymi, powinieneś użyć proponowanych już rozwiązań specyficznych dla domeny.
String str = Integer.toString(j); //integer or string with white spaces<br/> str = new StringBuffer(str.trim()).insert(str.length()-2, ".").toString();