我如何检查一个字符串(NSString)包含另一个较小的字符串?
我希望是这样的:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
但我能找到的最接近的是:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
不管怎样,这是找出字符串是否包含另一个字符串的最好方法吗?
对于iOS 8.0+和macOS 10.10+,你可以使用NSString的本地containsString:。
对于旧版本的iOS和macOS,你可以为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下面关于命名的评论
NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) {
NSLog(@"string does not contain bla");
} else {
NSLog(@"string contains bla!");
}
关键是注意到rangeOfString:返回一个NSRange结构体,并且文档说如果“haystack”不包含“needle”,它返回结构体{NSNotFound, 0}。
如果你在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中的工作方式)
对于iOS 8.0+和macOS 10.10+,你可以使用NSString的本地containsString:。
对于旧版本的iOS和macOS,你可以为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下面关于命名的评论