【发布时间】:2010-05-26 11:43:42
【问题描述】:
在我的 iPhone 项目中,我有许多 HTML 文件,每个文件中都有不同的文本和图像内容。我需要实现搜索工具,它会返回匹配关键字的结果(HTML 文件名)。任何人都可以有任何线索,我怎样才能做到这一点?谢谢
【问题讨论】:
标签: iphone objective-c
在我的 iPhone 项目中,我有许多 HTML 文件,每个文件中都有不同的文本和图像内容。我需要实现搜索工具,它会返回匹配关键字的结果(HTML 文件名)。任何人都可以有任何线索,我怎样才能做到这一点?谢谢
【问题讨论】:
标签: iphone objective-c
您可以使用它在多个 html 文件中搜索文本:
NSError *err = nil;
NSString *pageHTML = [NSString stringWithContentsOfFile:htmlfilePath encoding:NSUTF8StringEncoding error:&err];
if(err)
{
pageHTML = [NSString stringWithContentsOfFile:filePath encoding:NSASCIIStringEncoding error:&err];
}
if([searchTxtField.text length])
{
NSRange range1 = [pageHTML rangeOfString:searchTxtField.text options:NSCaseInsensitiveSearch];
if(range1.location != NSNotFound)
{
NSString *stringFound = [pageHTML substringWithRange:range1];
}
else
{
//Load the next html page.
}
}
【讨论】:
NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];
NSFileManager *localFileManager=[[NSFileManager alloc] init];
NSDirectoryEnumerator *dirEnum =[localFileManager enumeratorAtPath:docsDir];
NSString *file;
NSString *stringYourelookingFor=@"String you're lookign for";
NSArray *matchingFiles=[NSMutableArray array];
while (file = [dirEnum nextObject])
if ([[file pathExtension] isEqualToString: @"html"])
NSString *currentFile = [NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:&err];
if ([currentFile rangeOfString:stringYourelookingFor options:NSCaseInsensitiveSearch]!=NSNotFound)
[matchingFiles addObject:file]
}
}
[localFileManager release];
最后 matchingFiles 将包含所有匹配 stringYourelookingFor 的文件
【讨论】:
其他两个答案都将非常缓慢且占用大量内存,因为它们要求您将磁盘上的每个文件都读入内存。
我建议在用户想要搜索 HTML 文件之前创建自己的索引,然后简单地搜索索引。这正是 Core Data 所擅长的。
【讨论】:
CLucene 是 C++ 中 Lucene 搜索库的实现。 http://sourceforge.net/projects/clucene/ 我以前见过它在公司环境中使用过。它使用倒排索引并根据相关性返回结果。您需要存储它将创建的索引。
【讨论】: