Доллар в строке замены в Java
В строке замены для replaceAll символ
$ имеет специальный смысл: он начинает
ссылку на группу, например $1. Поэтому
обычный знак доллара в Java нужно экранировать
обратным слешем:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "price 10";
Pattern pattern = Pattern.compile("(\\d+)");
String withGroup = pattern.matcher(txt).replaceAll("cost $1");
String withDollar = pattern.matcher(txt).replaceAll("cost \\$1");
System.out.println(withGroup);
System.out.println(withDollar);
}
}
Когда строка замены приходит из переменной и ее
нужно вставить буквально, безопаснее применить
Matcher.quoteReplacement. Тогда доллар
и обратный слеш не будут считаться спецсимволами:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "price 10";
String replacement = "cost $1";
Pattern pattern = Pattern.compile("\\d+");
String res = pattern.matcher(txt)
.replaceAll(Matcher.quoteReplacement(replacement));
System.out.println(res);
}
}
Дана строка:
String txt = "item 15";
Замените число на текст "$15"
и выведите результат.