[英]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.