Представьте, что у вас есть коллекция List<String>
, которая может содержать десятки тысяч строк.Если некоторые из них имеют формат:
"This is ${0}, he likes ${1},${2} ... ${n}"
Каков наиболее эффективный (с точки зрения производительности) способ преобразования строки, подобной приведенной выше, в:
"This is %1, he likes %2,%3 ... %n"
Обратите внимание, что путь% начинается с 1. Вот мое решение:
import java.util.regex.*;
...
String str = "I am ${0}. He is ${1}";
Pattern pat = Pattern.compile("\\\$\\{(\\d+)\\}");
Matcher mat = pat.matcher(str)
while(mat.find()) {
str = mat.replaceFirst("%"+(Integer.parseInt(mat.group(1))+1))
mat = pat.matcher(str);
}
System.out.println(str);
Я надеюсь, что это правильный код Java, я только что написал его сейчас в GroovyConsole.Мне интересны более эффективные решения, так как я думаю, что применение стольких подстановок регулярных выражений для такого количества строк может быть слишком медленным.Код завершения будет работать как код Java, а не как код Groovy, я просто использовал Groovy для быстрого создания прототипов:)