首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪个更快-正则匹配还是我自己的匹配功能?

哪个更快-正则匹配还是我自己的匹配功能?
EN

Stack Overflow用户
提问于 2014-05-10 13:23:59
回答 1查看 217关注 0票数 2

我正在开发一个名为智能呼叫布洛克的Android应用程序,它允许您输入regex模式,然后检索传入的电话号码并执行匹配,然后根据匹配是否成功允许/拒绝呼叫。

用户输入的模式应该允许:

代码语言:javascript
运行
复制
either a digit, or a dot (meaning don't care the digit at this position), 
or a range (e.g. [3-7]), or a set of digits (e.g. [2, 5, 8])

现在,我已经编写了代码,手动比较输入的电话号码数字与模式,并允许/拒绝相应的电话号码。它以线性时间运行(比较数等于电话号码中的数字数)。

对于android应用来说,哪个应该更快更轻呢?

  1. 我写的手工方法。
  2. regex库使用自己的Pattern.compile()和matches()等方法。

为什么和怎么做?

编辑:

我已经粘贴了代码这里。我无法对android进行适当的基准测试,尽管我可以将这两种方式作为我系统上的普通java程序进行执行时间比较。但是我不认为仅仅通过在系统上看到这些程序的运行时间就能得出比在实际的android设备上运行时更能得出的结论。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-10 15:58:44

首先,这不是一个很好的问题,因为没有办法提供参考或者用你给出的内容来测试我的答案。因此,一些基于理论的答案:

对于android应用来说,哪个应该更快更轻呢?

你的代码应该更快。原因有二:

  1. 它是“预编译”。regex匹配器将模式编译成某种类型的内部代码(字节码或树)。这需要时间。您的代码运行时没有这种开销。
  2. 大多数regex匹配器--包括Java库的匹配器--都使用通用分支和界限搜索算法。即使搜索是不必要的(它总是正确地分支),搜索的能力也会带来一些小的开销。

因此,如果您的代码运行速度比等效正则表达式慢,那么您的代码就不好了。请注意:在Android中,您的代码可能是用Java编写的,我假设Android库仍然是Java代码。这是我上一次给Android写信,但那是几个版本前的事了。Android编译器还不如原来的gcc。因此,如果添加了一些优化,那么您可能必须在本地重新实现代码,以获得比regex更好的效果。

非常重要的警告和有教养的猜测:从文件中读取模式和编译(如果使用regexes)应该只在应用程序启动期间完成一次。如果这样做,代码和regex方法之间的速度差异将非常小,因此不会产生任何影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23581580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档