К сожалению, то, что вы пытаетесь здесь, не сработает. Java использует аппликативную оценку порядка, что означает, что аргументы оцениваются до того, как функция когда-либо будет вызвана. В вашем случае вы получаете длину двухсимвольной строки "$1"
, а не количество цифр, которые будут записаны в группе № 1.
Итак, когда вы используете эту строку:
string.replaceAll("(\\d+)","$1".length+" $1 POSINT_TAG");
Что видит функция:
string.replaceAll("(\\d+)","2 $1 POSINT_TAG");
Что касается решения вашей проблемы, ответ, опубликованный finnw, будет работать.