【发布时间】:2013-03-08 20:59:51
【问题描述】:
我有一个字符串数组(关键字),我需要检查有多少字符串存在于一个较大的字符串(从文件中读取的文本)中。我需要检查不区分大小写。 此刻我所做的是:
private void findKeywords() {
String body = email.getMessage();
for (String word : keywords) {
if (body.toLowerCase().contains(word.toLowerCase())) {
//some actions }
if (email.getSubject().contains(word)) {
//some actions
}
}
}
通过阅读此处的问题,出现了另一个解决方案:
private void findKeywords() {
String body = email.getMessage();
for (String word : keywords) {
boolean body_match = Pattern.compile(Pattern.quote(word), Pattern.CASE_INSENSITIVE).matcher(body).find();
boolean subject_match = Pattern.compile(Pattern.quote(word), Pattern.CASE_INSENSITIVE).matcher(email.getSubject()).find();
if (body_match) {
rating++;
}
if (subject_match) {
rating++;
}
}
}
以下哪种解决方案更有效?还有另一种更好的方法吗?任何公认的解决方案都必须易于实施(与上述方案相当)并且最好没有外部库,因为在这种情况下这不是很重要的问题。
【问题讨论】:
-
为什么不尝试一下,看看哪个跑得最快???
-
因为那时我不知道是否有比上面更快的解决方案。
-
那你为什么不问是否有更快的解决方案?顺便说一句:有。使用 Lucene(或类似的)来索引您的电子邮件;索引存储比原始字符串搜索要快得多。
-
我作为程序员的偏好是第一个代码块,因为它更容易立即发现它在做什么(因此更容易修改)。只有在确实需要时才应该调整算法以获得更好的性能......