Java - 检查字符串是否包含double值的最快方法

3

我正在读取许多大型文本文件,我必须检查每个文本片段是否包含双精度值。目前我使用的正则表达式代码导致程序运行非常慢,因为总共要检查100亿个字符串。由于我要检查的字符串数量很大,所以我的程序肯定会运行缓慢。但是有没有更有效和更快速的方法来检查一个字符串是否为双精度值,从而减少程序的运行时间?谢谢

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

.....
}

此外,在检查字符串之前,文本文件中的字符串被读入数组中,因此不会浪费时间不断地读取文本文件。


1
执行 matcher.find("\\d")。你的正则表达式很慢,因为尝试运行 .*\\d.* 的正则表达式性能较差 - 你有两个 .* 可以尝试匹配任意长度从0到N个字符。在正则表达式上执行 find 将会从每个位置开始查找。 - Patashu
除非您需要将字符串存储在内存中以进行其他操作,否则将字符串读入内存会增加内存使用量,而性能收益不明显。在检查之前尽可能避免将字符串读入数组可能是值得尝试的。 - Jonathan Leffler
2个回答

4

使用 PatternMatcher 类:

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

...

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

2
你应该使用find而不是matches,使用\\d而不是.*\\d.*以提高速度。 - Patashu

0

这个表达式

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

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

请注意,Java允许更多的格式,例如1.或1.或0x1p1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接