IPhone: найдите одну строку в другой с регистрацией регистра
Мой вопрос похож на Как проверить, содержит ли строка другую строку в Objective-C?
Как проверить, содержит ли строка (NSString) другую меньшую строку, но игнорируя случай?
NSString *string = @"hello bla bla";
Я надеялся на что-то вроде:
NSLog(@"%d",[string containsSubstring:@"BLA"]);
В любом случае есть ли способ найти, содержит ли строка другую строку с игнорированием case? Но, пожалуйста, не конвертируйте обе строки в UpperCase или в LowerCase.
Ответы
Ответ 1
Как и в ответе, указанном в ссылке, используйте 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!");
}
Ответ 2
Из 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!");
}
Ответ 4
Метод
[string rangeOfString:@"bla" options:NSCaseInsensitiveSearch];
должен помочь вам.
Ответ 5
Вы можете использовать -(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;
для получения диапазона для подстроки, параметр mask
используется для указания нечувствительности к регистру.
Пример:
NSRange r = [str rangeOfString:@"BLA"
options:NSCaseInsensitiveSearch];
Как указано в documentation, метод возвращает диапазон, например {NSNotFound, 0}
, когда подстрока не найдена.
BOOL b = r.location == NSNotFound;
Важный этот метод вызывает исключение, если строка nil
.