Я пытаюсь заменить текст, используя метод replaceAll, но получая эту ошибку
Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 0
${rate+0.0020D2}
вот мой код
String regExp = "\\$\\{rate[+-]\\d+(\\.\\d+)D[0-9]\\}";
String text = "${rate+0.0020D2},banana,${rate-0.4002D3},${rate+0.2003D4},${rate+bananD4},${rate+.123.415D4}";
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(text);
String match = null;
List<String> matches = new ArrayList<String>(5);
while (matcher.find()) {
int startIndex = matcher.start();
int endIndex = matcher.end();
match = matcher.group();
matches.add(match.substring(2, match.length() - 1));
}
String[] results = matches.toArray(new String[0]);
for(int i=0;i <= results.length;i++){
text.replaceAll(results[i],"<span class=\"rate\""+i+">"+results[i]+ "</span>");
}
Я могу решить эту проблему, если я использую text.replaceAll("\\$\\{rate+0.0020D2\\}","<span class=\"rate\""+i+">"+results[i]+ "</span>");
но я не могу этого сделать, потому что мое значение находится в переменной. есть ли какое-либо решение для этого
Ваше регулярное выражение: ${rate+0.0020D2}
. Вам нужно избегать этого:
text.replaceAll(Pattern.quote(results[i]),"<span class=\"rate\""+i+">"+results[i]+ "</span>");
Matcher.quoteReplacement("<span ...")
для второго аргумента replaceAll
потому что в замене тоже нужно экранировать $
replace
вместоreplaceAll
если вы не хотите, чтобы строка заменялась регулярным выражением