【问题标题】: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)]]) {
...
}