我有多个{!XXX}短语的字符串。例如:
Kumar gaurav {!str1}只是{!str2},adasdas {!str3}
我需要用相应的str替换所有{!str}值,如何从我的字符串中替换所有{!str}?
答案 0 :(得分:2)
您可以使用Pattern
和Matcher
,它为您提供了查询字符串以查找未知数量元素的方法,并结合使用\{!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)