【问题标题】:Search exact word in NSString在 NSString 中搜索确切的单词
【发布时间】:2012-04-30 16:15:44
【问题描述】:

我需要找到一个词或几个词。但是,通过这种方法,我也找到了一个词。

NSString *searchString = [NSString stringWithFormat:@"%@",searchField.text];
NSRange range = [textString rangeOfString : searchString];

    if (range.location != NSNotFound) {


        NSLog(@"textString = %@", textString);

    }

我需要准确的单词/单词

我该怎么办?

谢谢!

【问题讨论】:

    标签: objective-c xcode nsstring nsrange


    【解决方案1】:

    在 NSString 中有多种解析/查找子字符串的方法:

    • NSString 本身
    • NSRegularExpression。这可能更适合您的需求,因为您可以解决单词周围空格的情况。因此在搜索cat 时不会从catapult 返回cat。
    • NSScanner (很可能对你的需要有点矫枉过正)

    ...当然,它们各有优缺点。

    NSString 在“查找字符和子字符串”下有 9 种方法。方法如:

    -rangeOfString:
    查找并返回给定字符串在接收器中第一次出现的范围。

    NSRegularExpression 在“使用正则表达式搜索字符串”下有 5 种方法。方法如:

    -numberOfMatchesInString:选项:范围:
    返回字符串指定范围内正则表达式的匹配数。

    了解NSScanner 可能也很有用,但如果您解析字符串而不是简单地查找子部分,这个类会更有用。

    【讨论】:

      【解决方案2】:

      如果您在搜索字符串的末尾添加一个空格会发生什么情况,如下所示:

      NSString *searchString = [NSString stringWithFormat:@"%@ ",searchField.text];
      

      如果来自searchField.text 的字符串已经以空格结尾,则必须将其删除。

      这还不是一个完美的解决方案,例如,如果搜索字符串位于句子的末尾,您将找不到它。相反,您可以做的不是添加空格字符,而是查看命中后的字符并确保它不是字母。为此,请查看NSCharacterSet 类:

      NSCharacterSet * letters = [NSCharacterSet letterCharacterSet];
      if (![letters characterIsMember:[textString characterAtIndex:(range.location+searchString.length)]]) {
      ... 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-18
        • 2019-04-29
        • 1970-01-01
        • 2022-11-06
        相关资源
        最近更新 更多