我有一组需要应用于一组String的正则表达式替换,
例如:
("\s{2,}" --> " ")
(\.([a-zA-Z]-->". $1")
所以我会有这样的事情:
String s="hello .how are you?";
s=s.replaceAll("\\s{2,}"," ");
s=s.replaceAll("\\.([a-zA-Z])",". $1");
....
它有效,但想象一下,我试图在长字符串上替换100多个这样的表达式。不用说这可能有多慢。
所以我的问题是,是否有更有效的方法可以使用单个replaceAll(或类似的东西,例如Pattern / Matcher)来推广这些替换
我已关注Java Replacing multiple different...,
但问题是我的正则表达式不是simple Strings
。
答案 0 :(得分:4)
您有两个replaceAll
来电:
s = s.replaceAll("\\s{2,}"," ");
s = s.replaceAll("\\.([a-zA-Z])",". $1");
您可以将它们组合成一个replaceAll
,如下所示:
s = s.replaceAll("\\s{2,}|(\\.)(?=[a-zA-Z])", "$1 ");
答案 1 :(得分:1)
查看Replace multiple substrings at Once并进行修改。
使用echo ($result);
。
修改循环以检查匹配的组。然后使用该组号获取替换lambda。
伪码
Map<Integer, Function<Matcher, String>>