.contains()的优点和拆分字符串进行比较?

时间:2015-02-14 23:32:53

标签: java arrays string split

我有一个大约500 000行的文件。每一行都有以下形式:'日期#content'。我想将日期与给定日期进行比较,然后我将每一行.split(' # ')读入String[],并将日期与if(lineString[0].equals(givenDate)){...}进行比较。既然内容不包含日期,我就足以使用if(lineString.contains(givenDate)){...}。那么有任何优点(运行时间,效率)或我应该知道的任何困难吗?

修改 谢谢你的答案和解释。 .startsWith似乎是最好的解决方案。

2 个答案:

答案 0 :(得分:6)

我认为最有效的方式是.startsWith。它只会将字符读取到时间格式的末尾,并且从一个字符不同的那一刻起也会中断搜索。

为什么不.split

Split遍历该行到最后,这是因为它的目的是将字符串拆分为任意数量的部分,因此字符串末尾可能有#

为什么不.contains

同样的原因:它将继续尝试匹配字符串中的日期。此外,甚至有可能在文本中间某处存储日期,在这种情况下,您甚至可以匹配技术上不正确的行。

例如 - 这里对格式做了一个小假设 - 如果该行显示:

20141231 # Scheduled an appointment with Tim on 20150115

然后搜索20150115会导致匹配,虽然该行与该日期有关,但不会在该日期发布。

答案 1 :(得分:1)

split使用PatternMatcher behind the covers,但对于非常简单的情况(可能是您的情况)。对于任意正则表达式,如果您的拆分字符串是正则表达式,编译模式并将其重用于文件中的每个字符串通常会更有效。在您的情况下,我同意startsWith可能是最有效的。代码更紧凑,没有可观的内存分配。

相关问题