在NSString中搜索确切的单词

时间:2012-04-30 16:15:44

标签: objective-c xcode nsstring nsrange

我需要找一个字或几个字。然而,通过这种方法,我发现了一些词。

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

    if (range.location != NSNotFound) {


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

    }

我需要单词/ words exact

我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

  • NSString本身
  • NSRegularExpression。这可能更适合您的需求,因为您可以解决围绕单词周围的白色空间的情况。因此,在搜索cat时,catapult不会返回cat
  • NSScanner (很可能满足您的需求)

......他们当然都有自己的PRO和CON。

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

  

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

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

  

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

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

答案 1 :(得分:2)

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

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

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

这还不是一个完美的解决方案,例如,如果搜索字符串位于句子末尾,则无法找到它。相反,你可以做的不是添加空格字符,而是在点击后查看字符并确保它不是字母。为此,请查看课程NSCharacterSet

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