【发布时间】:2012-03-20 13:01:32
【问题描述】:
我正在尝试替换如下字符串:
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:“非法重复”。
转义 $ (Pattern.compile("\\${(.+?)\}") 会导致编译错误。
所以我必须如何更改我的模式以接受 ${var} 而不是 {var}
【问题讨论】: