Java 如何替换字符串中的所有{!XXX}?

Java 如何替换字符串中的所有{!XXX}?,java,salesforce,apex,Java,Salesforce,Apex,我有多个{!XXX}短语的字符串。例如: Kumar gaurav{!str1}只是{!str2},adasdas{!str3} 我需要用相应的str替换所有的{!str}值,如何替换我字符串中的所有{!str}?您可以使用模式和匹配器,它提供了查询字符串中未知数量元素的方法,并结合\{!str d\}正则表达式这将允许您根据标签分解文本 例如 String text = "All that {!str1} is {!str2}"; Map<String, String> value

我有多个{!XXX}短语的字符串。例如:

Kumar gaurav{!str1}只是{!str2},adasdas{!str3}


我需要用相应的str替换所有的{!str}值,如何替换我字符串中的所有{!str}?

您可以使用
模式
匹配器
,它提供了查询字符串中未知数量元素的方法,并结合
\{!str d\}正则表达式
这将允许您根据标签分解文本

例如

String text = "All that {!str1} is {!str2}";
Map<String, String> values = new HashMap<>(25);
values.put("{!str1}", "glitters");
values.put("{!str2}", "gold");

Pattern p = Pattern.compile("\\{!str\\d\\}");
Matcher matcher = p.matcher(text);
while (matcher.find()) {
    String match = matcher.group();         
    text = text.replaceAll("\\" + match, values.get(match));
}

System.out.println(text);
你也可以使用像

int previousStart = 0;
StringBuilder sb = new StringBuilder();
while (matcher.find()) {
    String match = matcher.group();
    int start = matcher.start();
    int end = matcher.end();

    sb.append(text.substring(previousStart, start));
    sb.append(values.get(match));

    previousStart = end;
}

if (previousStart < text.length()) {
    sb.append(text.substring(previousStart));
}
int-previousStart=0;
StringBuilder sb=新的StringBuilder();
while(matcher.find()){
String match=matcher.group();
int start=matcher.start();
int end=matcher.end();
sb.append(text.substring(previousStart,start));
sb.append(value.get(match));
上一次开始=结束;
}
如果(上一个开始

这消除了循环中的
字符串创建,更依赖于匹配的位置来剪切标记周围的原始文本,这让我更高兴;)

使用这个正则表达式,很简单

    String string="hello world {!hello}";
    string=string.replaceAll("\\{!(.*?)\\}", "replace");
    System.out.println(string); //this will print (hello world replace)

请尝试Java中的replaceAll()方法,展示您的努力。通过参考相关文档,可以轻松完成此任务。
    String string="hello world {!hello}";
    string=string.replaceAll("\\{!(.*?)\\}", "replace");
    System.out.println(string); //this will print (hello world replace)