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

时间:2011-10-05 08:27:50

标签: java replace

目前我正在做

示例:

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

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

编辑:

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

4 个答案:

答案 0 :(得分:20)

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

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,并根据循环中的实际匹配。

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

它不是简短简单作为您的代码,但您可以构建简短的方法。

答案 1 :(得分:20)

此功能已在Commons LangStringUtils课程中实施。

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

答案 2 :(得分:4)

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

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

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

或者

MapReplaceUtil(String s, Map<String, String> replacementMap);

甚至

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

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

答案 3 :(得分:2)

对于斯卡拉爱好者:

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

使用m,您甚至可以参与替换。