Olá micheldf,
Eu uso bastante as expressões regulares do java. Pelo que sei, uma função pronta pra isso não existe porque nesse caso, você precisa substituir cada ocorrência por um valor diferente. Então a única maneira que conheço (e que já usei), é criar um StringBuilder para receber o texto novo e ir preenchendo-o à medida que você encontra os números na string original. Recomendo fazer isso da seguinte maneira:
1 - Crie um mapa onde as chaves são os números à serem encontrados e o valor é a string a ser colocada no lugar, ou seja, um Map<Integer, String>.
2 - Crie um java.util.regex.Pattern para encontrar qualquer número:
Pattern pattern = Pattern.compile("\d+");
3 - Crie um Matcher com a string a ser processada:
Matcher matcher = pattern.matcher(“bla bla {@322@} bla bla bla bla bla bla {@1442@} bla bla”);
4 - Use o método find do matcher para encontrar sequencialmente cada número. Cada vez que o matcher encontra sua regexp, os outros métodos do matcher irão conter informações adicionais sobre o match. Entre as que você precisa você terá os índices dos limites da string encontrada(métodos start() e end()) e a própria string (método group()), que você poderá jogar em Integer.parseInt() para obter a chave do mapa com as substituições. Com essas informações você poderá ir construindo uma cópia da string original no StringBuilder criado.
Um exemplo simples usando os métodos que você precisa:
String bla = "sjbcdjklsnajkl76ksjhdvuk12klsdnjvld";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(bla);
while (matcher.find()) {
System.out.print(matcher.group());
System.out.print("\t" + matcher.start());
System.out.println("\t" + matcher.end());
}
Acho a API de regexp do java muito boa. É simples (tem só duas classes), poderosa e eficiente. Em particular acho eficiente porque você pode compilar expressões regulares e guardá-las numa variável estática por exemplo. A instância do objeto Pattern é quem guarda a expressão regular compilada.
Espero que ajude.
Abs,
José Roberto