Ответ 1
Не знаете, как последний приведет к ошибке; это просто не соответствует чему-либо, потому что вы используете слишком много обратных косых черт на $
.
Это должно работать:
string.replaceAll("\\$\\{title\\}", title);
Т.е. как вы это делаете?
String string = "Sample string with ${title} to be inserted.";
string.replaceAll("${title}", title);
Все следующие результаты в ошибке:
string.replaceAll("\\${title}", title);
string.replaceAll("\\\\${title}", title);
string.replaceAll("\\\\$\\{title\\}", title);
И больше ничего не работает, все это приводит к ошибке:
java.util.regex.PatternSyntaxException: Illegal repetition near index 4 \\$\\{title\\}
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.closure(Pattern.java:2775)
at java.util.regex.Pattern.sequence(Pattern.java:1889)
at java.util.regex.Pattern.expr(Pattern.java:1752)
Не знаете, как последний приведет к ошибке; это просто не соответствует чему-либо, потому что вы используете слишком много обратных косых черт на $
.
Это должно работать:
string.replaceAll("\\$\\{title\\}", title);
У класса Pattern есть функция escape для таких функций, как
string.replaceAll(Pattern.quote("${title}"), title);
Вы можете избежать строки поиска как \Q${title}\E
Это звучит как типичный пример использования языка шаблонов, например FreeMarker.
\$\{title\}
В регулярном выражении escape-символ \
, чтобы использовать это, мы должны написать \\
, как в String
, \
используется как escape-символ.
Например str = str.replaceAll("rot\\*speed", "rotorspeed");
rot*speed
заменит на rotorspeed
,