Как проверить строку на текст

#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:

Ответ №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.