поиск строки без учета регистра - iphone - PullRequest
9 голосов
/ 03 ноября 2011

Я ищу способ выполнить поиск строки без учета регистра внутри другой строки в Objective-C.Я мог бы найти способы поиска чувствительных к регистру строк и сравнения нечувствительных к регистру, но не поиска + нечувствительного к регистру.

Примеры поиска, который я хотел бы выполнить:

"Джон "в пределах", я сказал ДЖОНУ найти хороший алгоритм поиска "

" плохая ИДЕЯ "внутри" Я думаю, что это действительно плохая идея, чтобы отправить этот вопрос "

Я предпочитаюпридерживаться только NSStrings.

Ответы [ 4 ]

31 голосов
/ 03 ноября 2011
NSRange r = [MyString rangeOfString:@"Boo" options:NSCaseInsensitiveSearch];

Не стесняйтесь инкапсулировать это в метод в категории через NSString, если вы делаете это много.Как это:

@interface NSString(MyExtensions)
-(NSRange)rangeOfStringNoCase:(NSString*)s;
@end

@implementation NSString(MyExtensions)
-(NSRange)rangeOfStringNoCase:(NSString*)s
{
    return  [self rangeOfString:s options:NSCaseInsensitiveSearch];
}
@end

Ваш код может стать более читабельным с этим.Опять же, менее читаемым для незнакомых.

9 голосов
/ 03 ноября 2011

ошибочно принят как c #?

вот несколько советов для objc

NSRange textRange = [[string lowercaseString] rangeOfString:[substring lowercaseString]];

if(textRange.location != NSNotFound)
{
//Does contain the substring
}

, которые я получил от Google на этой веб-странице: http://www.developers -life.com / делает-а-NSString-содержат-а-substring.html

это помогает вашему сценарию?

8 голосов
/ 10 июня 2015

Если вы используете ios 8, вы можете использовать localizedCaseInsensitiveContainsString NSString

- (BOOL) localizedCaseInsensitiveContainsString: (NSString *) aString

localizedCaseInsensitiveContainsString:является регистронезависимым вариантом.Обратите внимание, что он также использует текущую локаль.Независимая от локали операция без учета регистра, и другие потребности могут быть достигнуты путем вызова rangeOfString: options: range: locale: сразу.

0 голосов
/ 28 марта 2015

Вот само-контейнерное решение для Swift :

private func containsKeyword(text: NSString, keyword: String) -> Bool
{
  return text.rangeOfString(keyword, options:NSStringCompareOptions.CaseInsensitiveSearch).location != NSNotFound
}
...