目前我正在进行以下事项
示例:
line.replaceAll(",","").replaceAll("cat","dog").replaceAll("football","rugby");
我认为它很丑陋。不确定有更好的方法吗?也许可以通过哈希表进行循环遍历吗?
编辑:
通过效率我指的是更好的代码风格和灵活性。
目前我正在进行以下事项
示例:
line.replaceAll(",","").replaceAll("cat","dog").replaceAll("football","rugby");
我认为它很丑陋。不确定有更好的方法吗?也许可以通过哈希表进行循环遍历吗?
编辑:
通过效率我指的是更好的代码风格和灵活性。
这个功能已经在Commons Lang的StringUtils
类中实现了。
StringUtils.replaceEach(String text, String[] searchList, String[] replacementList)
您可以使用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
,并根据循环内的实际匹配结果决定实际替换。
您可以通过这种方式构建更加灵活的东西,比如将所有十进制数替换为十六进制数或进行类似操作。
虽然这不像您的代码那样 简短 和 简单,但是您可以使用它构建简短而简单的方法。
while
循环内部,只需检查 m.group()
的返回值并根据返回的内容使用不同的第二个参数调用 appendReplacement
。 - Joachim Sauerregex
,我认为这种方法很好。非正则表达式的实现可以在StringUtils.replace(..)中找到。MultiReplaceUtil.replaceAll{line,
{",", ""}, {"cat", "dog"}, {"football", "rugby"}};
MapReplaceUtil(String s, Map<String, String> replacementMap);
ArrayReplaceUtil(String s, String[] target, String[] replacement);
对我来说,无论从编码实践的角度来看,两者都不太直观。
对于Scala的爱好者:
"cat".r.replaceAllIn("one cat two cats in the yard", m => "dog")
使用m
,您甚至可以对替换参数化。