如何在NSString中的特定单词附近获取文本范围?

时间:2013-09-12 16:37:03

标签: objective-c search nsstring nsrange

我有一个很长的NSString,例如“出于性能原因,表视图数据源通常会重用UITableViewCell对象。表视图维护一个标记为可重用的单元格对象队列。例如,如果您显示的列表包含1000行,那么它将非常低效。创建1000个表格视图单元格,而创建当前视图中的少数单元格则更有效。“

现在如果用户搜索单词“maintain”,那么NSString上面肯定有这个单词..现在我只想显示这个单词的兰特,而不是全文。因此,使用将知道这个文本有这个词,它在哪里。

- 用户搜索“维护”。 -code处理NSString。 -Output看起来像这样..“表视图维护一个单元格对象的队列......”或者这也可以是一个结果..“维护一个单元格对象的队列......” 第二个结果会很棒...

NSRange range = [myString rangeOfString:@"maintains" options:NSBackwardsSearch range:NSMakeRange(0, 11)];

NSLog(@"range.location: %lu", range.location);

NSString *substring = [myString substringFromIndex:range.location+1];

NSLog(@"substring: '%@'", substring);`

但没有成功......来自CODE

请帮助我实现目标......

1 个答案:

答案 0 :(得分:1)

这样做:

- (NSString *)getSnippetContaining:(NSString *)keyword
                          inString:(NSString *)theString
                     numberOfWords:(NSUInteger)wordCount
{
    NSRange range = [theString rangeOfString:keyword
                                  options:NSBackwardsSearch
                                    range:NSMakeRange(0, theString.length)];
    if (range.location == NSNotFound) {
        return nil;
    }

    NSString *substring = [theString substringFromIndex:range.location];
    NSArray *words = [substring componentsSeparatedByString:@" "];
    if (wordCount > words.count) {
        wordCount = words.count;
    }
    NSArray *snippetWords = [words subarrayWithRange:NSMakeRange(0, wordCount)];
    NSString *snippet = [snippetWords componentsJoinedByString:@" "];

    return snippet;
}

numberOfWords是您希望从输入中提取的代码段的长度。