2012-04-30 47 views
4

我需要找到一个单词或几个单词。然而,用这种方法,我也发现了一块词。搜索NSString中的确切单词

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

    if (range.location != NSNotFound) { 


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

    } 

我需要的字/词精确

我该怎么办?

谢谢!

回答

3

有分析各种方式/在寻找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)]]) { 
... 
}