Будет ли что-то подобное работать?
System.out.println(
"1 duh 2 duh duh 3 duh"
.replaceFirst("(duh.*?)duh", "$1bleh")
); // prints "1 duh 2 bleh duh 3 duh"
Если вы просто хотите заменить второе вхождение шаблона в строке, вам действительно не нужно это вычисление индекса «начиная с».
В качестве бонуса, если вы хотите заменить все остальные duh
(то есть второй, четвертый, шестой и т. Д.), Тогда просто вызовите replaceAll
вместо replaceFirst
.