#iphone #xcode #nsstring #string-comparison #text-comparison
#iPhone #xcode #nsstring #сравнение строк #сравнение текста
Вопрос:
Я хотел бы протестировать строку, чтобы увидеть, содержит ли она где-нибудь текст «привет». Я бы хотел, чтобы тест не учитывал заглавные буквы. Как я могу проверить эту строку?
Ответ №1:
Используйте приведенный ниже код в качестве ссылки для поиска проверки наличия подстроки в строке.
NSString* string = @"How to test a string for text" ;
NSString* substring = @"string for" ;
NSRange textRange;
textRange =[string rangeOfString:substring options:NSCaseInsensitiveSearch];
if(textRange.location != NSNotFound)
{
//Does contain the substring
}
Ответ №2:
-[NSString rangeOfString: options:]
сделает это.
Ответ №3:
NSRange range = [string rangeOfString:@"hello" options:NSCaseInsensitiveSearch];
BOOL notFound = range.location==NSNotFound;
Ответ №4:
Я предполагаю, что все слова разделены пробелом и что в них нет знаков препинания. Если есть знаки препинания.
NSArray *dataArray = [Входная строка componentsSeparatedByString:@» «];
for(int i=0; i<[dataArray count]){
if([[dataArray objectAtIndex:i] isEqualToString:@"hello"]){
NSLog(@"hello has been found!!!");
}
}
Я не тестировал это, но теоретически это должно сработать.
Ознакомьтесь с документами о способах удаления знаков препинания и перевода всей строки в нижний регистр. Это должно быть довольно просто.
Комментарии:
1. придерживайтесь того, что сказал Грэм Ли. Имеет больше смысла, не осознавал, что такая функция существует.
Ответ №5:
Другие решения здесь хороши, но вам действительно следует использовать регулярное выражение,
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(hello)*$"
options:NSRegularExpressionCaseInsensitive
error:amp;error];
Документы здесь: http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html
Комментарии:
1. Две вещи: во-первых, ваше регулярное выражение не удовлетворяет требованию пользователя; во-вторых, почему должно использоваться регулярное выражение «на самом деле»? Потому что perl классный? Я не возражаю, но без обоснования такое утверждение ничего не стоит.
2. Да ладно, не будь саркастичным. Любой вид сопоставления должен выполняться с помощью регулярного выражения. Регулярные выражения не зависят от языка.
3. @sciritai но почему ? Что дает использование
NSRegularExpression
get, которыйNSString
встроенный поиск не может выполнить в на порядок меньшем количестве строк?4. Твердите сколько угодно о меньшем количестве строк, это хорошая практика. Мое предложение действительно.
5. Позвольте мне сформулировать это по-другому. Почему? Вы говорите «вам действительно следует использовать регулярное выражение», мне просто интересно узнать, почему это лучше. До сих пор вы не смогли указать причину. Если есть реальная причина, по которой в этой ситуации лучше использовать регулярное выражение, мне было бы интересно ее услышать, потому что я без проблем использовал API поиска строк NSString начиная с WebObjects 4.5.