前言:
现时同学们对“java模糊匹配”都比较注意,大家都需要剖析一些“java模糊匹配”的相关文章。那么小编在网络上汇集了一些关于“java模糊匹配””的相关内容,希望我们能喜欢,你们一起来学习一下吧!需求:给定文件命名格式,给定目录,列出其下所有满足格式的文件。格式:YYYYMMDD_单号_USER_XXXX.xlsx
为了做到通用性,计划用正则表达式去匹配。
^2[0-9]{7}_(.*){1,}_USER_[0-9]{4}.(xls|xlsx)$
目录下都满足条件还好,很快匹配上了。
20200512_0011_USER_0001.xls20200512_0011_USER_0002.xls20200512_0011_USER_0003.xls
但是运行一段时间,发现应用卡住半小时才执行完文件名匹配任务。
发现目录下还有其他文件,为啥会这么耗时呢?
sysout测试一下,发现条件不匹配正则表达式时,程序卡住不动了!!
顺便推荐个插件:devutils
base64编解码,Regex匹配,DigestUtil各种MD5/sha算法加密,URLCodec,socketClient,socketServer创建等
System.out.println("20200530_m-12321300111M-123_PROD_0001.xlsx" .matches("^2[0-9]{7}_(.*){1,}_USER_[0-9]{4}.(xls|xlsx)$"));
网上搜了半天,有人说正则表达式的效率较低,但是不用正则还有什么办法呢?!
试着把正则表达式写得不要那么严格点,效率正常了。
##原来的正则表达式^2[0-9]{7}_(.*){1,}_USER_[0-9]{4}.(xls|xlsx)$##新的正则表达式^2[0-9]{7}_[\\w|-]{1,}_USER_[0-9]{4}.(xls|xlsx)$
通过比对,发现第二段匹配单号条件写为(.*),在文件名不匹配的时候,单号越长,匹配效率越差。
在明确写为[\\w|-]之后,只匹配字母/数字/减号,效率提高很多。
看来针对不匹配模式,如果字符串复杂度或者长度越长,表达式越模糊,执行效率越差。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java模糊匹配