繁体   English   中英

NSRange非连续字符串搜索

[英]NSRange non-continuous string search

我的绳子是

NSString *str= @"Hello Hi How Are You Thank you";

如果我搜索“ hi how”,“ are are”或“ thank you”,则可以使用NSCaseInsensitiveSearch获得结果。

NSRange r=[searchable rangeOfString:@"hi how" options:NSCaseInsensitiveSearch]

if(r.location!=NSNotFound)

NSLog(@"true");

但是如果我搜索为“ hello how”或“ hi you”。 我没有任何结果。

NSRange r=[searchable rangeOfString:@"hi you" options:NSCaseInsensitiveSearch]

if(r.location!=NSNotFound)

NSLog(@"true");

请帮助我获得理想的结果。

谢谢

不确定这是否是您想要的

NSString *str= @"Hello Hi How Are You Thank you";

NSRange r1= [str rangeOfString:@"hi" options:NSCaseInsensitiveSearch];
NSRange r2 = [str rangeOfString:@"you" options:NSCaseInsensitiveSearch];
if(r1.location!=NSNotFound && r2.location!=NSNotFound && r2.location > r1.location)
{
    NSLog(@"true");
}

您实际上在执行的操作称为“过滤”,而不是“排序”。 在Swift中,您可以实现所需的行为,如下所示

var stringArray: [NSString] = ["a b c 2", "a d c 3", "a s d f c"]

let filterString = "a c"

stringArray.filter { (element) -> Bool in
    let filterComponents = filterString.componentsSeparatedByString(" ")
    for component in filterComponents {
        let range = element.rangeOfString(element as String, options: .CaseInsensitiveSearch)
        if range.location == NSNotFound {
            return false
        }
    }

    return true
}

print(stringArray)

它将打印[abc 2, adc 3, asdfc]

下面是Objective-C中的等效代码段。

NSArray *stringArray = @[@"a b c 2", @"a d c 3", @"a s d f c"];

NSString *filterString = @"a c";
NSArray *filterComponents = [filterString componentsSeparatedByString:@" "];

NSMutableArray *filteredArray = [[NSMutableArray alloc] init];

for (NSString *string in stringArray) {
    bool matchesFilter = YES;

    for (NSString *component in filterComponents) {
        NSRange range = [string rangeOfString:component options:NSCaseInsensitiveSearch];
        if (range.location == NSNotFound) {
            // don't include in filteredArray
            matchesFilter = NO;
            break;
        }
    }

    if (matchesFilter) {
        [filteredArray addObject:string];
    }

}

NSLog(@"%@", filteredArray);

将会显示( "abc 2", "adc 3", "asdfc" )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM