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

时间:2015-08-05 05:37:24

标签: java salesforce apex

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

  

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用PatternMatcher,它为您提供了查询字符串以查找未知数量元素的方法,并结合使用\{!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);

哪个输出

All that glitters is gold

您还可以使用类似......

的内容
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));
}

它取消了循环中的String创建,并且更依赖于匹配的位置来切割标记周围的原始文本,这让我更快乐;)

答案 1 :(得分:0)

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

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