Я пытаюсь заменить строку вроде:
Hello, my name is ${name}. I am ${age} years old.
с
Hello, my name is Johannes. I am 22 years old.
Переменные хранятся в HashMap.
Мой код пока:
private void replace() {
HashMap<String, String> replacements = new HashMap<String, String>();
replacements.put("name", "Johannes");
replacements.put("age", "22");
String text = "Hello, my name is {name}. I am {age} years old.";
Pattern pattern = Pattern.compile("\\{(.+?)\\}");
Matcher matcher = pattern.matcher(text);
StringBuilder builder = new StringBuilder();
int i = 0;
while (matcher.find()) {
String replacement = replacements.get(matcher.group(1));
builder.append(text.substring(i, matcher.start()));
if (replacement == null) {
builder.append("");
} else {
builder.append(replacement);
i = matcher.end();
}
}
builder.append(text.substring(i, text.length()));
System.out.println(builder);
}
Это нормально, но я бы хотел заменить $ {var}, а не {var}.
Измените его на Pattern.compile ("\ $ {(. +?) \}"); вызовет исключение PatternSyntaxException: "Illeagal повторение".
Выход из $ (Pattern.compile ("\\ $ {(. +?) \}") Приведет к ошибке компиляции.
Итак Как мне изменить свой Шаблон, чтобы он принимал $ {var} вместо {var}