.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
会得到匹配结果,虽然该行与该日期有关,但未在该日期发布。
我有一个包含大约 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
会得到匹配结果,虽然该行与该日期有关,但未在该日期发布。