Может ли NSRange определить, существует ли фрагмент текста в большей строке? - PullRequest
2 голосов
/ 17 января 2011

У меня есть большая строка, возвращаемая из http GET, и я пытаюсь определить, есть ли у нее определенный фрагмент текста или нет (пожалуйста, прости мои грехи здесь)/ Должен ли я использовать NSRange, чтобы определить, существует ли этот фрагмент текста?

  NSRange textRange;
  textRange =[[responseString lowercaseString] rangeOfString:[@"hat" lowercaseString]];

  if(textRange.location != NSNotFound)
  {
    //do something magical with this hat
  }

Заранее спасибо!

Ответы [ 2 ]

11 голосов
/ 17 января 2011

Вы можете проверить, является ли местоположение NSNotFound:

NSRange textRange = [[responseString lowercaseString] rangeOfString:@"hat"];
if (textRange.location == NSNotFound) {
    // "hat" is not in the string
}

Если строка не найдена, rangeOfString: возвращает {NSNotFound, 0}.

Вы можете связать этов категорию на NSString, если вы часто ее используете:

@interface NSString (Helper)
- (BOOL)containsString:(NSString *)s;
@end

@implementation NSString (Helper)

- (BOOL)containsString:(NSString *)s
{
    return [self rangeOfString:s].location != NSNotFound;
}

@end
1 голос
/ 23 января 2016

iOS 9.2, Xcode 7.2, ARC включена

Спасибо "Мипади" за оригинальный вклад. Я хотел разработать и обновить ответ.

Почему вы все еще используете эту технику? Ну, - (BOOL)containsString:(NSString *)str поддерживается только iOS 8.0 и выше.

Мое любимое использование этого:

if (yourString)
{
    //Check to make yourString is not nil, otherwise NSInvalidArgumentException is raised.

    if (!([yourString rangeOfString:@"stringToSearchFor"].location == NSNotFound))
    {
        //The string "stringToSearchFor" was found in yourString, i.e. the result is NOT NSNotFound.
    }
    else
    {
        //The string "stringToSearchFor" was not found in yourString.
    }
}
else
{
    nil;
}

Надеюсь, это кому-нибудь поможет! Приветствия.

...