协慌网

登录 贡献 社区

如何检查字符串是否包含 Objective-C 中的另一个字符串?

如何检查字符串( NSString )是否包含另一个较小的字符串?

我希望有类似的东西:

NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);

但我能找到的最接近的是:

if ([string rangeOfString:@"hello"] == 0) {
    NSLog(@"sub string doesnt exist");
} 
else {
    NSLog(@"exists");
}

无论如何,这是查找字符串是否包含另一个字符串的最佳方法吗?

答案

NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) {
  NSLog(@"string does not contain bla");
} else {
  NSLog(@"string contains bla!");
}

关键是注意到rangeOfString:返回一个NSRange结构, 文档说它返回结构{NSNotFound, 0}如果 “haystack” 不包含 “needle”。


如果您使用的是 iOS 8 或 OS X Yosemite,您现在可以: (* 注意:如果在 iOS7 设备上调用此代码,这将使您的应用程序崩溃)。

NSString *string = @"hello bla blah";
if ([string containsString:@"bla"]) {
  NSLog(@"string contains bla!");
} else {
  NSLog(@"string does not contain bla");
}

(这也是它在 Swift 中的工作方式)

?

注意:这个答案现在已经过时了

为 NSString 创建一个类别:

@interface NSString ( SubstringSearch )
    - (BOOL)containsString:(NSString *)substring;
@end

// - - - - 

@implementation NSString ( SubstringSearch )

- (BOOL)containsString:(NSString *)substring
{    
    NSRange range = [self rangeOfString : substring];
    BOOL found = ( range.location != NSNotFound );
    return found;
}

@end

编辑:观察 Daniel Galasko 关于命名的评论

由于这似乎是谷歌的高排名结果,我想添加这个:

iOS 8 和 OS X 10.10 将containsString:方法添加到NSString 。这些系统的 Dave DeLong 示例的更新版本:

NSString *string = @"hello bla bla";
if ([string containsString:@"bla"]) {
    NSLog(@"string contains bla!");
} else {
    NSLog(@"string does not contain bla");
}