2009-12-28 51 views
0

我试图在短语(NSString)中找到一个单词。NSArray元素与NSString的比较

为此,我将短语的组件分解为单个子字符串,现在我试图将它们与我正在查找的单词进行比较,但它不起作用。

什么是正确的方法和下面的软件修复?

NSString *myString = @"Mi Programa es genial"; 
NSArray *explodedDescription = [myString componentsSeparatedByString:@" "]; 

if ([explodedDescription objectAtIndex:1] == @"Programa") { 
    NSLog(@"Found"); 
} 
+1

请注意,由空格字符分割是一种非常幼稚的方法。文本可能是使用不同分隔符的语言,也可能是没有空格的换行符。 – 2009-12-28 18:01:58

+0

或者它可能是一个子句中的最后一个单词(因此包括逗号,分号或终点标点,例如句号),或者它可能是第一个或不是第一个单词,因此在大小写上不同,或者它可能不是这个词的根本版本:它可能是一个动名词,比较级,最高级,过去式,过去分词,或根的任何其他派生词。 – 2009-12-29 00:52:41

+0

唯一真正的解决方案是使用了解多种形式的标点符号的实际解析器来解析字符串,并使用可以将根与衍生物连接的数据库查找单词(例如,搜索“搜索”时匹配“搜索”)和一个可以解释拼写错误(例如,“查找”或“saerching”或“searthing”)的比较器。即便如此,还是要为自己争取很多很多的边缘案例。 – 2009-12-29 00:59:33

回答

2

你这样做了艰辛的道路!使用NSString的-rangeOfString:方法或其中一个变体来获取另一个字符串中字符串的位置。

+0

这不适用于*单词*,因为它会愉快地检测到另一个单词中的一个单词。天真的发誓过滤器是最常见的受害者;在这种情况下,它被称为斯肯索普问题(在英国的一个小镇,在一个愚蠢的发誓过滤器下你不能说的名字)。 – 2009-12-29 00:56:52

+0

显然,你会为每个结果进行文字边界分析,如果结果未通过检查,则继续搜索。请参阅NSAttributedString的doubleClickAtIndex:方法。 – 2009-12-29 19:07:25