Java - 检查一个字符串是否包含double值的最快方法
问题描述:
我正在阅读很多大型文本文件,并且必须检查每个文本片段是否包含double值。我正在使用的正则表达式代码导致我的程序运行速度非常缓慢,因为总共检查了100亿个字符串。我知道由于我正在检查大量的字符串,我的程序肯定会缓慢运行。但是有没有更高效更快速的方法来检查String是否是double值,从而减少了程序的运行时间?由于Java - 检查一个字符串是否包含double值的最快方法
if (string[i].matches(".*\\d.*")) {
.....
}
而且,从文本文件中的字符串被读入一个数组之前我检查过的,所以不浪费时间不断阅读的文本文件。
答
该表达
"\\d+\\.\\d+([eE]\\d+)?"
允许1.1或1.1e1或1.1E1格式。
注意,Java允许多个如1或1或0x1p1
做'matcher.find( “\\ d”)'。你的正则表达式很慢,因为试图运行正则表达式'。* \\ d。*'的性能很差 - 你有两个'。*'可以尝试从0到N个字符的任意长度。正则表达式中的“find”会在每个地方开始寻找。 – Patashu 2013-03-05 01:37:51
除非由于某些其他原因需要内存中的字符串,否则将以字符串的内存使用情况为代价将字符串读入内存,从而导致性能不明确。在检查之前避免将字符串读入数组可能是值得的。 – 2013-03-05 02:05:09