最有效的使用方法是替换字符串中的多个单词

目前我正在做

例:

line.replaceAll(",","").replaceAll("cat","dog").replaceAll("football","rugby"); 

我觉得它很难看。 不确定更好的方法吗? 也许循环遍历hashmap?

编辑:

效率我的意思是更好的代码风格和灵活性

此function已在Commons Lang的StringUtils类中实现。

 StringUtils.replaceEach(String text, String[] searchList, String[] replacementList) 

您可以使用Matcher.appendReplacement() / appendTail()来构建非常灵活的搜索和替换function。

JavaDoc中的示例如下所示:

 Pattern p = Pattern.compile("cat"); Matcher m = p.matcher("one cat two cats in the yard"); StringBuffer sb = new StringBuffer(); while (m.find()) { m.appendReplacement(sb, "dog"); } m.appendTail(sb); System.out.println(sb.toString()); 

现在,在while循环中,您可以自己决定替换文本是什么,并将该信息基于匹配的实际内容。

例如,您可以使用模式(,|cat|football)来匹配, cat football并根据循环内的实际匹配来决定实际替换。

您可以通过这种方式使构建更加灵活,例如用hex数字或类似操作替换所有十进制数字。

它不像你的代码那么简单简单 ,但你可以使用它构建简短的方法。

除此之外,实际替换在内部转换为regex我认为这种方法很好。 可以在StringUtils.replace(..)中找到非正则表达式实现。

看看可能存在哪些替代方案,您仍然需要一些东西来识别字符串对。 这可能看起来像:

 MultiReplaceUtil.replaceAll{line, {",", ""}, {"cat", "dog"}, {"football", "rugby"}}; 

也许

 MapReplaceUtil(String s, Map replacementMap); 

甚至

 ArrayReplaceUtil(String s, String[] target, String[] replacement); 

在编码实践方面,这对我来说似乎都不那么直观。

对于斯卡拉爱好者:

 "cat".r.replaceAllIn("one cat two cats in the yard", m => "dog") 

使用m您甚至可以参数化替换。