4

我需要找到一个词或几个词。然而,用这种方法,我也发现了一句话。

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

    if (range.location != NSNotFound) {


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

    }

我需要准确的词/词

我能怎么做?

谢谢!

4

2 回答 2

3

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

  • NSString 本身
  • NS 正则表达式。这可能更适合您的需求,因为您可以解决单词周围空格的情况。因此在搜索时不会返回catfrom 。catapultcat
  • NSScanner (很可能为您的需要矫枉过正)

...当然,他们每个人都有自己的优点和缺点。

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

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

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

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

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

于 2012-04-30T19:44:08.870 回答
2

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

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

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

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

NSCharacterSet * letters = [NSCharacterSet letterCharacterSet];
if (![letters characterIsMember:[textString characterAtIndex:(range.location+searchString.length)]]) {
... 
}
于 2012-04-30T19:19:29.480 回答