Как словить ошибку: использовать эти символы при замене.
String string = "Price: #PRICE#"; String price = "$more"; string = string.replaceAll("#PRICE#", price);Что имеем:
java.lang.IllegalArgumentException: Illegal group referenceЕсли использовать, например,
String price = "$10";, то получим
java.lang.IndexOutOfBoundsException: No group 1
Понятно, что в данном случае лучше всего использовать MessageFormat, но речь не об этом. Способ намбер ту схематично выглядит так:
String string = "Price: #PRICE#"; Matcher variableMatcher = variablePattern.matcher( string ); StringBuffer result = new StringBuffer(64); while (variableMatcher.find()) { String var = variableMatcher.group(1); // if "PRICE"... String price = "$more"; variableMatcher.appendReplacement(result, price); } variableMatcher.appendTail(result); string = result.toString();Решение — экранирование спецсимволов в строках, КОТОРЫМИ заменяем. Можно не руками, для этого есть специальный метод:
price = Matcher.quoteReplacement(price);, им надо воспользоваться до вызова replaceAll/appendReplacement/...
Это всё.
Комментариев нет:
Отправить комментарий