这个问题已经在这里有了答案: > Most efficient way to use replace multiple words in a string 4个
我想执行以下操作:将所有ck替换为k,将所有dd替换为wr,将所有f替换为m,再进行10次这样的替换.
我可以用replace(“ ck”,“ k”).replace(“ dd”,“ wr”)等来完成,但是它接缝很傻并且很慢. java中有没有做类似这样的功能?
例如replace(string,stringArray1,stringArray2);
解决方法:
这是一种通用的方法:
private static String replace(String input, Map mappings) {
StringBuffer buf = new StringBuffer();
Matcher m = Pattern.compile(toRegex(mappings.keySet())).matcher(input);
while (m.find())
m.appendReplacement(buf, Matcher.quoteReplacement(mappings.get(m.group())));
return m.appendTail(buf).toString();
}
private static String toRegex(Collection keys) {
return keys.stream().map(Pattern::quote).collect(Collectors.joining("|"));
}
如果您不使用Java 8,则第二种方法是:
private static String toRegex(Collection keys) {
StringBuilder regex = new StringBuilder();
for (String key : keys) {
if (regex.length() != 0)
regex.append("|");
regex.append(Pattern.quote(key));
}
return regex.toString();
}
测试码
Map mappings = new HashMap<>();
mappings.put("ck","k");
mappings.put("dd","wr");
mappings.put("f", "m");
System.out.println(replace("odd flock", mappings)); // prints: owr mlok
有关运行版本,请参见IDEONE.
标签:java,string,replace
来源: https://codeday.me/bug/20191013/1908062.html