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

Advantages of .contains() and splitting a string to compare?

我有一个包含大约 500 000 行的文件。每行都具有以下形式:'a date # content'。我想将日期与给定日期进行比较,我曾经读取每一行,.split(' # ') 将其转换为 String[] 并将日期与 if(lineString[0].equals(givenDate)){...} 进行比较。现在内容不包含日期,使用 if(lineString.contains(givenDate)){...} 就足够了。那么我应该知道有什么优势(运行时、效率)或困难吗?

编辑: 感谢您的回答和解释。 .startsWith 似乎是最好的解决方案。

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

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

为什么不.split

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

为什么不.contains

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

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

20141231 # Scheduled an appointment with Tim on 20150115

然后搜索 20150115 会得到匹配结果,虽然该行与该日期有关,但未在该日期发布。