【发布时间】:2013-01-05 18:08:02
【问题描述】:
您好,我正在寻找使用目标 c 比较 2 个字符串。一个字符串是一个单词,另一个字符串是一个或多个单词。如何在单词级别检查匹配项?即,如果多个单词字符串中的任何单词与我的单个单词字符串匹配,则返回 1 否则返回 0 ?非常感谢任何帮助。
【问题讨论】:
标签: objective-c string comparison
您好,我正在寻找使用目标 c 比较 2 个字符串。一个字符串是一个单词,另一个字符串是一个或多个单词。如何在单词级别检查匹配项?即,如果多个单词字符串中的任何单词与我的单个单词字符串匹配,则返回 1 否则返回 0 ?非常感谢任何帮助。
【问题讨论】:
标签: objective-c string comparison
您可能想使用-[NSString rangeOfString:]:
if ([multipleWords rangeOfString:singleWord].location != NSNotFound)
return YES;
return NO;
但它并不完美。你可能在multipleWords 和singleWord 中有“返回”,可能是“返回”,给你一个误报。
所以我们必须使用NSRegularExpression。
NSString *single = @"returning";
NSString *multiple = @"a man is returning home";
NSString *pattern = [NSString stringWithFormat:@"\\b%@\\b",single];
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive
error:&error];
NSRange range = NSMakeRange(0, multiple.length);
NSUInteger matched = [regex numberOfMatchesInString:multiple options:0 range:range];
NSLog(@"number of matched = %ld", matched);
【讨论】:
你可以使用NSString的rangeOfString方法:
NSRange range = [multiWordString rangeOfString:oneWordString];
if (range.location == NSNotFound)
return 0;
else
return 1;
【讨论】:
NSRegularExpression...:P
如果您在较长的“I AM AWARE”中搜索“WAR”,上述代码将返回 1。也许您正在寻找整个单词匹配。
在这种情况下,您应该使用...将长字符串拆分为单个单词的数组。
NSArray *singleWords = [multiWordString componentsSeparatedByString: @" "];
然后解析数组找到oneWordString
【讨论】:
您可以使用[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] 将字符串中的单词拆分为一个数组。然后,您可以检查数组中的每个单词以查看它是否与正在搜索的单个单词匹配。这不是最有效的方式,但可以满足您的需求。
【讨论】: