Используйте цикл замены регулярных выражений.
К вашему сведению: Вам также необходимо заменить число во входной строке, поэтому я использую %COUNT%
в качестве маркера для этого.
Также обратите внимание, что %
не является специальным символом в регулярном выражении, поэтому нет необходимости избегать его.
Эта логика может быть легко расширена для поддержки большего количества маркеров замены.
public static String singmultiVAR(int count, String input) {
StringBuilder buf = new StringBuilder(); // Use StringBuffer in Java <= 8
Matcher m = Pattern.compile("%(?:(COUNT)|SINGMULTI:([^:%]+):([^:%]+))%").matcher(input);
while (m.find()) {
if (m.start(1) != -1) { // found %COUNT%
m.appendReplacement(buf, Integer.toString(count));
} else { // found %SINGMULTI:x:y%
m.appendReplacement(buf, (count == 1 ? m.group(2) : m.group(3)));
}
}
return m.appendTail(buf).toString();
}
Тест
for (int count = 0; count < 4; count++)
System.out.println(singmultiVAR(count, "Some text with %COUNT% %SINGMULTI:number:numbers%!"));
Выход
Some text with 0 numbers!
Some text with 1 number!
Some text with 2 numbers!
Some text with 3 numbers!