在Objective-C中查找一个不区分大小写的字符串

问题描述 投票:29回答:6

我的问题类似于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。

objective-c substring nsstring
6个回答
80
投票

类似于链接中提供的答案,但使用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!");
}

9
投票

从iOS 8,您可以将containsString:localizedCaseInsensitiveContainsString方法添加到NSString。

if ([string localizedCaseInsensitiveContainsString:@"BlA"]) {
    NSLog(@"string contains Case Insensitive bla!");
} else {
    NSLog(@"string does not contain bla");
}

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

0
投票

方法

[string rangeOfString:@"bla" options:NSCaseInsensitiveSearch];

应该帮助您。


0
投票

您可以使用-(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;获取子字符串的范围,mask参数用于指定不区分大小写的匹配。

示例:

NSRange r = [str rangeOfString:@"BLA"
                       options:NSCaseInsensitiveSearch];

documentation中所述,当未找到子字符串时,该方法将返回一个类似于{NSNotFound, 0}的范围。

BOOL b = r.location == NSNotFound;

重要如果字符串为nil,则此方法引发异常。


0
投票

Swift 4的最新答案

extension String 
{
    func containsCaseInsensitive(string : String) -> Bool {
            return self.localizedCaseInsensitiveContains(string)
     }
}

用法:

print("Hello".containsCaseInsensitive(string: "LLO"))

输出

true

希望有帮助。编码愉快。

© www.soinside.com 2019 - 2024. All rights reserved.