айфон: найди одну строку в другой с кейсом - PullRequest
27 голосов
/ 13 февраля 2012

Мой вопрос похож на Как проверить, содержит ли строка другую строку в Objective-C?

Как я могу проверить, содержит ли строка (NSString) другую меньшую строку, но без учета регистра?

NSString *string = @"hello bla bla";

Я надеялся на что-то вроде:

NSLog(@"%d",[string containsSubstring:@"BLA"]);

В любом случае, есть ли способ найти, если строка содержит другую строку с регистром игнорирования? Но, пожалуйста, не конвертируйте обе строки в UpperCase или LowerCase.

Ответы [ 6 ]

78 голосов
/ 13 февраля 2012

Аналогично ответу, приведенному в ссылке, но используйте 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!");
}
8 голосов
/ 29 ноября 2016

В iOS 8 вы можете добавить метод containsString: или localizedCaseInsensitiveContainsString к NSString.

if ([string localizedCaseInsensitiveContainsString:@"BlA"]) {
    NSLog(@"string contains Case Insensitive bla!");
} else {
    NSLog(@"string does not contain bla");
}
2 голосов
/ 13 февраля 2012
NSString *string = @"hello BLA";
if ([string rangeOfString:@"bla" options:NSCaseInsensitiveSearch].location == NSNotFound) {
    NSLog(@"string does not contain bla");
} else {
    NSLog(@"string contains bla!");
}
0 голосов
/ 25 июня 2018

Обновленный ответ для Swift 4

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

Использование:

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

Вывод :

true

Надеюсь, это поможет.Удачного кодирования.

0 голосов
/ 13 февраля 2012

Вы можете использовать -(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;, чтобы получить диапазон для подстроки, параметр mask используется для указания нечувствительного к регистру соответствия.

Пример:

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

Как указано в документация , метод возвращает диапазон, такой как {NSNotFound, 0}, когда подстрока не найдена.

BOOL b = r.location == NSNotFound;

Важно этот метод вызывает исключение, если строкаnil.

0 голосов
/ 13 февраля 2012

Метод

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

должен вам помочь.

...