В переменной position
хранится номер события, которое вы хотите заменить. Как и в вашем случае, вы пытались заменить 5-й, поэтому теперь он хранится как 5.
Pattern p = Pattern.compile("#");
Matcher m = p.matcher(chart);
int count = 0;
int position = 5;
int index = 0;
while (m.find()) {
count++;
if (count == position - 1) {
index = m.end();
}
}
String regex = "([#\n]{" + index + "})(#)([#\\n]{1,})";
chart = chart.replaceAll(regex, "$1/$3");
System.out.println(chart);
Сначала я выясню, на каком символе заканчивается n-1 вхождение, и сохранил его в index . После этого в replaceAll У меня есть регулярное выражение, которое группирует строку из трех частей: одна перед заменяемым символом, следующая группа содержит только один символ, который является n-ым вхождением, а последняя группа содержит оставшиеся.$1/$3
означает замену всей строки на group1 , затем / , затем group3 .