搜索NSString是否包含值

时间:2014-02-23 13:58:37

标签: objective-c

我有一些字符串值,它由几个字符构成,我想检查它们是否存在于另一个NSString中,没有区分大小写和空格。

示例代码:

NSString *me = @"toBe" ;
NSString *target=@"abcdetoBe" ;
//than check if me is in target.

此处我将获得true,因为me中存在target。 我该如何检查这种情况?

我已阅读How do I check if a string contains another string in Objective-C?,但其区分大小写,我需要找到没有区分大小写的内容。

3 个答案:

答案 0 :(得分:20)

将选项NSCaseInsensitiveSearchrangeOfString:options:

一起使用
NSString *me = @"toBe" ;
NSString *target = @"abcdetobe" ;
NSRange range = [target  rangeOfString: me options: NSCaseInsensitiveSearch];
NSLog(@"found: %@", (range.location != NSNotFound) ? @"Yes" : @"No");
if (range.location != NSNotFound) {
    // your code
}

NSLog输出:

  

发现:是的

注意:我更改了目标以证明不区分大小写的搜索有效。

选项可以“或”组合在一起,包括:

  • NSCaseInsensitiveSearch
  • NSLiteralSearch
  • NSBackwardsSearch
  • NSAnchoredSearch
  • NSNumericSearch
  • NSDiacriticInsensitiveSearch
  • NSWidthInsensitiveSearch
  • NSForcedOrderingSearch
  • NSRegularExpressionSearch

答案 1 :(得分:2)

-(BOOL)substring:(NSString *)substr existsInString:(NSString *)str {
    if(!([str rangeOfString:substr options:NSCaseInsensitiveSearch].length==0)) {
        return YES;
    }

    return NO;
}

用法:

NSString *me = @"toBe";
NSString *target=@"abcdetoBe";
if([self substring:me existsInString:target]) {
    NSLog(@"It exists!");
}
else {
    NSLog(@"It does not exist!");
}

答案 2 :(得分:1)

与iOS8的发布一样,Apple为NSString添加了一种名为localizedCaseInsensitiveContainsString的新方法。这将完全符合您的要求:

斯威夫特:

let string: NSString = "ToSearchFor"
let substring: NSString = "earch"

string.localizedCaseInsensitiveContainsString(substring) // true

目标-C:

NSString *string = @"ToSearchFor";
NSString *substring = @"earch";

[string localizedCaseInsensitiveContainsString:substring]; //true