Tuesday, 21 March 2017

ios - How do I check if a string contains another string in Objective-C?



How can I check if a string (NSString) contains another smaller string?



I was hoping for something like:



NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);



But the closest I could find was:



if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}



Anyway, is that the best way to find if a string contains another string?


Answer



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



The key is noticing that rangeOfString: returns an NSRange struct, and the documentation says that it returns the struct {NSNotFound, 0} if the "haystack" does not contain the "needle".






And if you're on iOS 8 or OS X Yosemite, you can now do: (*NOTE: This WILL crash your app if this code is called on an iOS7 device).



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

} else {
NSLog(@"string does not contain bla");
}


(This is also how it would work in Swift)



👍


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...