Может ли NSRange определить, существует ли фрагмент текста в большей строке?

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

Мой вопрос заключается в следующем: могу ли я использовать NSRange, чтобы определить, существует ли этот фрагмент текста?

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

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

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


person Toran Billups    schedule 17.01.2011    source источник


Ответы (2)


Вы можете проверить, является ли местоположение 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
person mipadi    schedule 17.01.2011

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

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

Почему вы все еще используете эту технику? Что ж, - (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;
}

Надеюсь, это поможет кому-то! Ваше здоровье.

person serge-k    schedule 23.01.2016