#华为云·寻找黑马程序员#【代码重构之路】使用Pattern的正确姿势
1、问题
在浏览项目时,发现一段使用正则表达式的代码
这段代码,在循环里执行了Pattern.matches()方法进行正则匹配判断。
查看matches方法的源码,可以看到
每调用一次matches方法,都会创建一个Pattern对象,而且这段代码还是在for循环里,如果外层函数又被频繁调用,就会出现很明显的性能问题。
创建Pattern实例的成本很高,因为需要将正则表达式编译成一个有限状态机(final state machine)。
2、解决
使用正则表达式的预编译功能,可以有效加快正则匹配速度
显式地将正则表达式编译成一个不可变的Pattern实例,让它成为类初始化的一部分
private static final Pattern TASKID_PATTERN = Pattern.compile("^\\d{1,15}");
最后在函数中使用如下方式调用,就可以避免创建不必要的Pattern实例
3、总结
正则表达式给人的印象是快捷简便。但是在 N.O.P.E 分支中使用正则表达式将是最糟糕的决定。如果万不得已非要在计算密集型代码中使用正则表达式的话,至少要将 Pattern 缓存下来,避免反复编译Pattern
创建Pattern实例的成本很高,因为需要将正则表达式编译成一个有限状态机(final state machine)
显式地将正则表达式编译成一个不可变的Pattern实例,让它成为类初始化的一部分。
【不建议】
// 没有使用预编译
private void func(...) {if (Pattern.matches(regexRule, content)) {...}
}
// 多次预编译
private void func(...) {Pattern pattern = Pattern.compile(regexRule);Matcher m = pattern.matcher(content);if (m.matches()) {...}
}
【建议】
private static final Pattern pattern = Pattern.compile(regexRule);private void func(...) {Matcher m = pattern.matcher(content);if (m.matches()) {...}
}
来源:华为云社区征文 作者:EmindCC
#华为云·寻找黑马程序员#【代码重构之路】使用Pattern的正确姿势相关推荐
- 移动端开发语言的未来的猜想#华为云·寻找黑马程序员#
[摘要] #华为云.寻找黑马程序员# 不管是最早的Phonegap,还是后来的React Native.Weex,Flutter,或者是各个公司自创开发语言,都是在不断寻求开发语言统一,从而解决ios ...
- 三伏天里小试牛刀andriod开发 #华为云·寻找黑马程序员#
三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员# 2019年07月,北京,三伏天,好热啊.越热自己还越懒得动换(肉身给的信号),但是做为产品经理/交互设计师的,总想着思考些什么(灵魂上 ...
- #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else
1. 背景 if/else是高级编程语言中最基础的功能,虽然 if/else 是必须的,但滥用 if/else,特别是各种大量的if/else嵌套,会对代码的可读性.可维护性造成很大伤害,对于阅读代码 ...
- #华为云·寻找黑马程序员#【代码重构之路】如何优雅的关闭外部资源
1.背景 在Java编程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编 ...
- #华为云·寻找黑马程序员#【代码重构之路】我是如何将8行代码缩减成1行的
[摘要]最近公司在大力提倡clean code, 而clean code 不仅是新写的代码要做,老旧的代码也要适当重构,精简我们的代码,毕竟代码还是要给人看的. 个人比较喜欢重构,当然,手术级的重构没 ...
- eplices如何导入外部代码_#华为云·寻找黑马程序员#【代码重构之路】如何优雅的关闭外部资源...
1.背景 在Java编程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编 ...
- python让你再也不为文章配图与素材发愁,让高清图片占满你的硬盘! #华为云·寻找黑马程序员#
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 大型情感剧集Selenium:1_介绍 #华为云·寻找黑马程序员#
学习selenium能做什么? 很多书籍.文章中是这么定义selenium的: Selenium 是开源的自动化测试工具,它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web ...
- 【带着canvas去流浪(13)】用Three.js制作简易的MARVEL片头动画(下)#华为云·寻找黑马程序员#
[摘要] three.js实现的Web 3D字体模型动画 示例代码托管在:http://www.github.com/dashnowords/blogs 有了上一篇基础知识的储备,本节就来制作一下简易 ...
最新文章
- 使用 IAsyncResult 进行 .NET 异步编程(转载)
- MySQL事务隔离级别详解
- unix和linux的区别
- Linux tmux
- Unity Physics.Raycast踩坑
- python调用flask接口实例化_常用业务接口界面化 in python flask
- jmeter根据循环获取参数_Jmeter--同线程组循环获取数据库数据传递请求
- Pychram中如何导入其他文件的.py文件
- 关于elastic-job 分片与线程问题
- 吐血整理的几十款小程序登陆界面【附完整代码】
- 如何免费在线将pdf转换成jpg图片
- 佳句赏析_求上者居中,求中者居下,求下者则不入流; 原作者 出处 出自 | 句子迷...
- 小米路由器登陆以及切换wan账户脚本
- tukey是什么意思_turkey中文是什么意思怎么读(英语里这个TURKEY这个多义词解析)...
- 光驱动器类有哪些最新发表的毕业论文呢?
- 期货反跟单-千万不要盲目开始反跟单交易
- NT Server无盘站配置技术详解
- 使用朋也社区搭建自己的社区网站就是这么简单~~
- 数字高程模型(DEM)—知识汇总
- 语音数据集 | Speech datasets
热门文章
- python读取指定行到最后一行_python读取文件最后一行两种方法
- python中构造方法的名字,【填空题】Python提供了名称为 的构造方法,实现让类的对象完成初始化。...
- 唐尼vr眼镜好吗_裸眼3DVR和全息投影有什么区别 他们之间谁更好一些
- POJ3321 Apple tree
- 爬虫3 requests基础之 乱码编码问题
- javascript遍历json对象数据的方法
- Python与自然语言处理搭建环境
- 一个字符串排列的小算法
- 精通RPM之--制作篇(rpmbuild)
- leetcode 42 python