我想用解析的$ 1替换字符串中每次出现的正则表达式。我怎么能这样做?
String line = "foo <<VAR>> bar <<VAR>>";
Matcher matcher = Pattern.compile("<<(\\w*?)>>").matcher(line);
Map<String,String> replacements = Collections.singletonMap("VAR","REPLACEMENT");
String replacedLine = matcher.replaceAll(replacements.get(?.group(1)));
Assert.assertTrue("foo REPLACEMENT bar REPLACEMENT".equals(replacedLine));
答案 0 :(得分:1)
您可以使用Matcher#appendReplacement
方法“匹配”时构建结果:
String line = "foo <<VAR>> bar <<VAR>> in <<NO>>";
Matcher m = Pattern.compile("<<(\\w+)>>").matcher(line);
Map<String,String> replacements = Collections.singletonMap("VAR","REPLACEMENT");
StringBuffer replacedLine = new StringBuffer();
while (m.find()) {
if (replacements.get(m.group(1)) != null)
m.appendReplacement(replacedLine, replacements.get(m.group(1)));
else
m.appendReplacement(replacedLine, m.group());
}
m.appendTail(replacedLine);
System.out.println(replacedLine.toString()); // => foo REPLACEMENT bar REPLACEMENT in <<NO>>
请参阅Java demo。
答案 1 :(得分:1)
这是否符合您的需求?
String line = "foo <<VAR>> bar <<VAR>>";
Map<String, String> replaceMap = new HashMap<>();
replaceMap.put("<<VAR>>", "REPLACEMENT");
//may be more replacement here
for(Map.Entry<String, String> entry: replaceMap.entrySet()){
line = line.replaceAll(entry.getKey(), entry.getValue());
}
System.out.println(line); //<- foo REPLACEMENT bar REPLACEMENT