我有一个大约500 000行的文件。每一行都有以下形式:'日期#content'。我想将日期与给定日期进行比较,然后我将每一行.split(' # ')
读入String[]
,并将日期与if(lineString[0].equals(givenDate)){...}
进行比较。既然内容不包含日期,我就足以使用if(lineString.contains(givenDate)){...}
。那么有任何优点(运行时间,效率)或我应该知道的任何困难吗?
修改
谢谢你的答案和解释。 .startsWith
似乎是最好的解决方案。
答案 0 :(得分:6)
我认为最有效的方式是.startsWith
。它只会将字符读取到时间格式的末尾,并且从一个字符不同的那一刻起也会中断搜索。
.split
? Split遍历该行到最后,这是因为它的目的是将字符串拆分为任意数量的部分,因此字符串末尾可能有#
。
.contains
?同样的原因:它将继续尝试匹配字符串中的日期。此外,甚至有可能在文本中间某处存储日期,在这种情况下,您甚至可以匹配技术上不正确的行。
例如 - 这里对格式做了一个小假设 - 如果该行显示:
20141231 # Scheduled an appointment with Tim on 20150115
然后搜索20150115
会导致匹配,虽然该行与该日期有关,但不会在该日期发布。
答案 1 :(得分:1)
split
使用Pattern
和Matcher
behind the covers,但对于非常简单的情况(可能是您的情况)。对于任意正则表达式,如果您的拆分字符串是正则表达式,编译模式并将其重用于文件中的每个字符串通常会更有效。在您的情况下,我同意startsWith
可能是最有效的。代码更紧凑,没有可观的内存分配。