目前我正在做
例:
line.replaceAll(",","").replaceAll("cat","dog").replaceAll("football","rugby");
Run Code Online (Sandbox Code Playgroud)
我觉得它很难看.不确定更好的方法吗?也许循环遍历hashmap?
编辑:
效率我的意思是更好的代码风格和灵活性
Joa*_*uer 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());
Run Code Online (Sandbox Code Playgroud)
现在,在该while循环中,您可以自己决定替换文本是什么,并将该信息基于匹配的实际内容.
例如,您可以使用模式(,|cat|football)匹配,,cat 或者 football根据循环内部的实际匹配来决定实际替换.
您可以通过这种方式使构建更加灵活,例如用十六进制数字或类似操作替换所有十进制数字.
这不是为短期和简单的代码,但你可以建立与它短而简单的方法.
小智 20
此功能已在Commons Lang的StringUtils课程中实现.
StringUtils.replaceEach(String text, String[] searchList, String[] replacementList)
Run Code Online (Sandbox Code Playgroud)
除此之外,实际的替换在内部转换为 aregex我认为这种方法很好。可以在StringUtils.replace(..)中找到非正则表达式实现。
看看可能有哪些替代方案,您仍然需要一些东西来识别字符串对。这可能看起来像:
MultiReplaceUtil.replaceAll{line,
{",", ""}, {"cat", "dog"}, {"football", "rugby"}};
Run Code Online (Sandbox Code Playgroud)
也许
MapReplaceUtil(String s, Map<String, String> replacementMap);
Run Code Online (Sandbox Code Playgroud)
甚至
ArrayReplaceUtil(String s, String[] target, String[] replacement);
Run Code Online (Sandbox Code Playgroud)
就编码实践而言,这对我来说似乎都更直观。
| 归档时间: |
|
| 查看次数: |
39603 次 |
| 最近记录: |