使用替换字符串中多个单词的最有效方法[重复](4个答案) 三年前关门了。 我想这样做:全部替换 ck 与 k 以及所有 dd 与 wr 以及所有 f 与 m 还有10个这样的替代品。我可以和你一起做 replace("ck","k").replace("dd","wr") 以此类推,但这是愚蠢的,它是缓慢的。java中有这样的函数吗?例如 replace(string,stringArray1, stringArray2);
Map<String, String> replacementMap = new HashMap<String, String>();
replacementMap.put("ck", "k");
replacementMap.put("dd", "wr");
replacementMap.put("f", "m");
// ...
String resultStr = "Abck fdddk wr fmck"; // whatever string to process
StringBuilder builder = new StringBuilder(resultStr); // wrap it in builder
Iterator<String> iterator = replacementMap.keySet().iterator();
while (iterator.hasNext()) {
String strToReplace = iterator.next();
replaceAll(builder, strToReplace, replacementMap.get(strToReplace));
}
System.out.println("Result is: " + builder.toString());
public static void replaceAll(StringBuilder builder, String from, String to) {
int index = builder.indexOf(from);
while (index != -1) {
builder.replace(index, index + from.length(), to);
index += to.length(); // Move to the end of the replacement
index = builder.indexOf(from, index);
}
}
2条答案
按热度按时间mv1qrgav1#
replaceall()方法是从jon skeet的答案中借用的
replaceall()int的另一种方法是使用ApacheCommons库,strbuilder类提供replaceall()方法。看到这个答案了吗
goqiplq22#
使用
appendReplacement
循环。以下是一种通用方法:
如果您不使用java 8+,第二种方法是:
测试代码
运行版本见ideone。