一个简单的问题我主要是在Java中处理正则表达式的速度。
虽然我知道很可能差别很小,但仍然很有趣。
对于某些字符串,例如"test test test test "
,哪个操作会更快:
string.replaceAll("\\s", "");
或string.replaceAll("\\s+", "");
第一个操作的正则表达式不那么复杂,但更换次数更多,第二次反之亦然。
哪个会(非常轻微地)更快?
答案 0 :(得分:3)
使用 \\ s + 正则表达式将是更快的方法
对于25个固定长度的字符串, 1000000 迭代需要 -
\\s = 1850479750 nano second
\\s+ = 1206349361 nano second
但是为了获得更好的性能,如果需要在多个替换操作中使用相同的模式,则应该编译模式一次然后使用模式对象
Pattern p = Pattern.compile("\\s+");
否则每次都是 调用String.replaceAll(),它在每次调用中执行相同的模式编译 -
2217
2218 public String replace(CharSequence target, CharSequence replacement) {
2219 return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
2220 this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
2221 }
答案 1 :(得分:2)
\ s +的效率在时间和空间复杂性方面会更好,因为: