我的问题类似于How do I check if a string contains another string in Objective-C?
如何检查字符串(NSString)是否包含另一个较小的字符串但忽略大小写?
NSString *string = @"hello bla bla";
我希望有这样的东西:
NSLog(@"%d",[string containsSubstring:@"BLA"]);
不管怎样,一个字符串是否包含另一个忽略大小写的字符串?但是请不要将两个字符串都转换为UpperCase或LowerCase。
类似于链接中提供的答案,但使用options
。
请参见- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask
中的Apple doc
NSString *string = @"hello bla bla";
if ([string rangeOfString:@"BLA" options:NSCaseInsensitiveSearch].location == NSNotFound)
{
NSLog(@"string does not contain bla");
}
else
{
NSLog(@"string contains bla!");
}
从iOS 8,您可以将containsString:
或localizedCaseInsensitiveContainsString
方法添加到NSString。
if ([string localizedCaseInsensitiveContainsString:@"BlA"]) {
NSLog(@"string contains Case Insensitive bla!");
} else {
NSLog(@"string does not contain bla");
}
NSString *string = @"hello BLA";
if ([string rangeOfString:@"bla" options:NSCaseInsensitiveSearch].location == NSNotFound) {
NSLog(@"string does not contain bla");
} else {
NSLog(@"string contains bla!");
}
方法
[string rangeOfString:@"bla" options:NSCaseInsensitiveSearch];
应该帮助您。
您可以使用-(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;
获取子字符串的范围,mask
参数用于指定不区分大小写的匹配。
示例:
NSRange r = [str rangeOfString:@"BLA"
options:NSCaseInsensitiveSearch];
如documentation中所述,当未找到子字符串时,该方法将返回一个类似于{NSNotFound, 0}
的范围。
BOOL b = r.location == NSNotFound;
重要如果字符串为nil
,则此方法引发异常。
Swift 4的最新答案
extension String
{
func containsCaseInsensitive(string : String) -> Bool {
return self.localizedCaseInsensitiveContains(string)
}
}
用法:
print("Hello".containsCaseInsensitive(string: "LLO"))
输出:
true
希望有帮助。编码愉快。