我知道如何在另一个字符串中找到一个字符串,这很容易。但在这种情况下,我想在allProfessors字符串中找到John Smith。所以我想我可以拆分字符串并搜索这两个部分,这可以解决我想要的问题:
NSString *fullName = @"John Smith";
NSArray *parts = [fullName componentsSeparatedByString:@" "];
NSString *allProfessors = @"Smith, John; Clinton, Bill; Johnson, John";
NSRange range = [[allProfessors lowercaseString] rangeOfString:[[parts objectAtIndex:0] lowercaseString]];
NSRange range2 = [[allProfessors lowercaseString] rangeOfString:[[parts objectAtIndex:1] lowercaseString]];
if(range.location != NSNotFound && range2.location != NSNotFound) {
NSLog(@"Found");
} else {
NSLog(@"Not Found");
}
我想知道的是,这是最好的方法吗?还是有更优选的方法来做我想做的事?
除此之外,如果我的fullName比我的allProfessors名称长,如下所示:
NSString *fullName = @"Gregory Smith";
NSString *allProfessors = @"Smith, Greg; Clinton, Bill; Johnson, John";
我仍然希望格雷格史密斯和格雷戈里史密斯有一场比赛。
答案 0 :(得分:2)
您可以使用我更喜欢使用的正则表达式。请参阅RegexKitLite。
使用RegexKitLite,您可以使用正则表达式,如(未经测试):
NSString *regEx = @"(?i)Smith,\\s*\\w";
NSArray *matchingStrings = [allProfessors componentsMatchedByRegex:regEx];
if ([matchingStrings count] == 0) // not found!
{
[...]
}
else
{
[...]
}
使用RegexKitLite你也可以使用[NSString stringByMatching:(NSString *)]。
你可以用正则表达式做很多事情。通过Using RegexKitLite提供了大量不同的功能。上面的正则表达式应该找到姓氏为Smith的人。
正则表达式解释:
(?i)
使此案例不敏感Smith
匹配史密斯的姓氏。显然你可以把它改成任何东西,
匹配逗号\\s*
匹配任意数量的空格(贪婪)\\w
匹配单词此外,您可以使用[NSString rangeOfString:options:]功能,如:
if ([myString rangeOfString:@"John" options:NSCaseInsensitiveSearch].location != NSNotFound &&
[myString rangeOfString:@"Smith" options:NSCaseInsensitiveSearch].location != NSNotFound)
{
NSLog(@"Found");
}
else
{
NSLog(@"Not Found");
}
另请参阅类似[rangeOfString:options:range:locale:]之类的函数,以便您可以执行不区分大小写的搜索,甚至可以指定区域设置。