【问题标题】:how to get a range to text near a specific word in a NSString?如何获取NSString中特定单词附近的文本范围?
【发布时间】:2013-09-12 16:37:02
【问题描述】:

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

现在,如果用户搜索单词“maintains”,那么上面的 NSString 肯定有这个词。现在我只想显示这个词的行数,而不是整个文本。所以使用会知道这个文本有这个词,它在哪里。

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

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

请帮我实现我的目标……

【问题讨论】:

    标签: objective-c search nsstring nsrange


    【解决方案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 是您希望从输入中提取的 sn-p 的长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多