2013-03-05 51 views
3

我正在阅读很多大型文本文件,并且必须检查每个文本片段是否包含double值。我正在使用的正则表达式代码导致我的程序运行速度非常缓慢,因为总共检查了100亿个字符串。我知道由于我正在检查大量的字符串,我的程序肯定会缓慢运行。但是有没有更高效更快速的方法来检查String是否是double值,从而减少了程序的运行时间?由于Java - 检查一个字符串是否包含double值的最快方法

if (string[i].matches(".*\\d.*")) { 

..... 
} 

而且,从文本文件中的字符串被读入一个数组之前我检查过的,所以不浪费时间不断阅读的文本文件。

+1

做'matcher.find( “\\ d”)'。你的正则表达式很慢,因为试图运行正则表达式'。* \\ d。*'的性能很差 - 你有两个'。*'可以尝试从0到N个字符的任意长度。正则表达式中的“find”会在每个地方开始寻找。 – Patashu 2013-03-05 01:37:51

+0

除非由于某些其他原因需要内存中的字符串,否则将以字符串的内存使用情况为代价将字符串读入内存,从而导致性能不明确。在检查之前避免将字符串读入数组可能是值得的。 – 2013-03-05 02:05:09

回答

4

使用PatternMatcher类:

public static final Pattern DOUBLE = Pattern.compile("\\d"); 

... 

if (DOUBLE.matcher(string[i]).find()) { 
    ... 
} 
+2

你也应该使用find而不是'* \\ d。*'来代替匹配和'\\ d',以获得速度 – Patashu 2013-03-05 01:38:58

+1

@Patashu Point采取,谢谢。 – arshajii 2013-03-05 01:39:18

0

该表达

"\\d+\\.\\d+([eE]\\d+)?" 

允许1.1或1.1e1或1.1E1格式。

注意,Java允许多个如1或1或0x1p1

相关问题