Вы можете использовать Matcher#appendReplacement
:
String s = "233<C:\\Users\\Grapes\\Documents\\title.png>233<C:\\Users\\Grapes\\Documents\\title.png>33";
int k = 0;
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("<[^<>]*>").matcher(s);
while (m.find()) {
m.appendReplacement(result, "<" + ++k + ">");
}
m.appendTail(result);
System.out.println(result.toString());
// => 233<1>233<2>33
См. Демонстрационную версию Java .
В вашем случае достаточно шаблона <[^<>]*>
, так как он будет соответствовать <
, затем любым 0 или более символам, отличным от <
и >
, а затем <
.