#华为云·寻找黑马程序员#【代码重构之路】使用Pattern的正确姿势
2023-09-14 08:57:19 时间
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
相关文章
- 【华为云技术分享】基于Atlas 200 DK的原版YOLOv3(基于Darknet-53)实现(Python版本)
- 【华为云技术分享】程序员真香定律:源码即设计
- 【华为云技术分享】MongoDB经典故障系列三:副本集延迟太高怎么办?
- python让你再也不为文章配图与素材发愁,让高清图片占满你的硬盘! #华为云·寻找黑马程序员#
- #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else
- Python-Excel 模块哪家强 #华为云·寻找黑马程序员#
- 三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员#
- #华为云·寻找黑马程序员#【代码重构之路】我是如何将8行代码缩减成1行的
- 大型情感剧集Selenium:2_options设置 #华为云·寻找黑马程序员#
- 华为OD机试 - 租车骑绿岛(Java & JS & Python)
- 华为OD机试 - 约瑟夫问题(Java & JS & Python)
- 华为OD机试 - 查找众数及中位数
- 【华为OD机试】1034 - 求小球落地5次后所经历的路程和第5次反弹的高度
- 【华为云技术分享】程序员真香定律:源码即设计
- 分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码
- 华为云内容审核—性能更加狂野,价格更加腼腆
- 华为云社区·CSDN【寻找黑马程序员】有奖征文活动,邀你挥洒才情
- 重磅!华为云社区·CSDN【寻找黑马程序员】有奖征文活动奖项公布!!
- #华为云·寻找黑马程序员#【代码重构之路】我是如何将8行代码缩减成1行的
- #华为云·寻找黑马程序员#【代码重构之路】使用Pattern的正确姿势
- #华为云·寻找黑马程序员#微服务-你真的懂 Yaml 吗?
- 大型情感剧集Selenium:4_老中医教你(单/多/下拉框)选项定位 #华为云·寻找黑马程序员#
- 大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#
- 【华为云电子书精华合集】华为云云享专家,TOP博主优质电子书合集 2000页+ 限时免费下载 | 云享书库推荐
- 【华为云技术分享】MongoDB经典故障系列六:CPU利用率太高怎么办?
- 【 华为OD机试 2023】 微服务的集成测试(C++ Java JavaScript Python)
- 玩转华为ENSP模拟器系列 | 配置EdVdPdNd L3VdPdNd实例
- 华为云的linux系统ubuntu r运行是突然被killed 是不是因为内存不足的原因
- 华为防火墙配置笔记
- 华为USG6000防火墙安全策略配置实例(CLI方式)