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




string substring (13)

我怎样才能检查一个字符串( 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 *first = @"Banana";
    NSString *second = @"BananaMilk";
    NSRange range = [first rangeOfString:second options:NSCaseInsensitiveSearch];

    if (range.length > 0) {
        NSLog(@"Detected");
    }
    else {
        NSLog(@"Not detected");
    }

Oneliner(更少量的代码,DRY,因为你只有一个NSLog ):

NSString *string = @"hello bla bla";
NSLog(@"String %@", ([string rangeOfString:@"bla"].location == NSNotFound) ? @"not found" : @"cotains bla"); 

注意:此答案现在已过时

为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 8Swift ,我们可以使用localizedCaseInsensitiveContainsString方法

 let string: NSString = "Café"
 let substring: NSString = "É"

 string.localizedCaseInsensitiveContainsString(substring) // true

在迅速的情况下,这可以使用

let string = "Package #23"
if string.containsString("Package #") {
    //String contains substring
}
else {
    //String does not contain substring
}

如果不打扰区分大小写的字符串。 尝试一次。

NSString *string  = @"Hello World!";

if([string rangeOfString:@"hello" options:NSCaseInsensitiveSearch].location !=NSNotFound)
{
    NSLog(@"found");
}
else
{
    NSLog(@"not found");
}

如果需要某个字符串的位置,这段代码会在Swift 3.0中出现

let string = "This is my string"
let substring = "my"

let position = string.range(of: substring)?.lowerBound

尝试这个,

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

最佳解决方案 像这样简单! 如果你想找到一个字或字符串的一部分。 您可以使用此代码。 在这个例子中,我们将检查单词的值是否包含“acter”。

NSString *word [email protected]"find a word or character here";
if ([word containsString:@"acter"]){
    NSLog(@"It contains acter");
} else {
     NSLog (@"It does not contain acter");
}

由于这似乎是Google的高级结果,我想补充一点:

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");
}

这是一个复制和粘贴功能片段:

-(BOOL)Contains:(NSString *)StrSearchTerm on:(NSString *)StrText
{
    return [StrText rangeOfString:StrSearchTerm 
        options:NSCaseInsensitiveSearch].location != NSNotFound;
}

NSString *categoryString = @"Holiday Event";
if([categoryString rangeOfString:@"Holiday"].location == NSNotFound)
{
    //categoryString does not contains Holiday
}
else
{
    //categoryString contains Holiday
}

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优胜美地,那么现在可以这样做: (*注意:如果在iOS7设备上调用此代码,这会使应用程序崩溃)。

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

👍





substring