Как я могу проверить, NSString
содержит ли string ( ) еще одну строку поменьше?
Я надеялся на что-то вроде:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
Но самое близкое, что я мог найти, было:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
В любом случае, это лучший способ узнать, содержит ли строка другую строку?
if ([string rangeOfString:@"hello"] == 0) {...}
ошибки несоответствия типов для NSRange и int. чтобы исправить это, вы должны изменить строку на следующее:if ([string rangeOfString:@"hello"].length == 0) {...}
Ответы:
Ключ замечает, что
rangeOfString:
возвращаетNSRange
структуру, а в документации говорится, что она возвращает структуру,{NSNotFound, 0}
если «стог сена» не содержит «иглы».И если вы используете iOS 8 или OS X Yosemite, теперь вы можете сделать следующее: (* ПРИМЕЧАНИЕ. Это приведет к аварийному завершению работы вашего приложения, если этот код вызывается на устройстве iOS7).
(Это также, как это будет работать в Swift)
👍
источник
[string rangeOfString:@"bla"].location != NSNotFound
будет истинным, когда строкаnil
!Для iOS 8.0+ и macOS 10.10+ вы можете использовать нативный NSString
containsString:
.Для более старых версий iOS и macOS вы можете создать собственную (устаревшую) категорию для NSString:
Примечание: обратите внимание на комментарий Даниэля Галаско ниже относительно именования
источник
return [self rangeOfString:substring].location != NSNotFound;
и включил в свою библиотеку рефакторинга es_ios_utils. github.com/peterdeweese/es_ios_utilsПоскольку это, похоже, результат высокого рейтинга в Google, я хочу добавить следующее:
iOS 8 и OS X 10.10 добавляют
containsString:
метод вNSString
. Обновленная версия примера Дейва Делонга для этих систем:источник
// Вы также можете использовать следующее:
источник
С iOS 8 и Swift мы можем использовать
localizedCaseInsensitiveContainsString
методисточник
Так что лично я очень ненавижу,
NSNotFound
но понимаю его необходимость.Но некоторые люди могут не понимать сложности сравнения с NSNotFound
Например, этот код:
имеет свои проблемы:
1) Очевидно, что
otherString = nil
этот код потерпит крах. простой тест будет:результаты в !! CRASH !!
2) Что не так очевидно для кого-то новичка в Objective-C, так это то, что тот же код НЕ будет аварийно завершаться
string = nil
. Например, этот код:и этот код:
оба приведет к
Что явно не то, что вы хотите.
Так что лучшее решение, которое я считаю работающим, состоит в том, чтобы использовать тот факт, что rangeOfString возвращает длину 0, так что лучший, более надежный код это:
ИЛИ ПРОСТО:
который для случаев 1 и 2 вернется
Это мои 2 цента ;-)
Пожалуйста, проверьте мой Gist для более полезного кода.
источник
Усовершенствованный вариант Р я решение «s , категория на NSString, что не только сказать, если строка находится в другой строке, но и занимает диапазон ссылки, является:
Используйте это как:
источник
Вот фрагмент функции копирования и вставки:
источник
Oneliner (Меньшее количество кода. СУХОЙ, так как у вас есть только один
NSLog
):источник
источник
попробуй это,
источник
Лучшее решение. Так просто, как это! Если вы хотите найти слово или часть строки. Вы можете использовать этот код. В этом примере мы собираемся проверить, содержит ли значение слова «acter».
источник
В Swift 4:
источник
Если вам это нужно, напишите:
источник
В случае быстрой, это может быть использовано
источник
Если не беспокоиться о регистрозависимой строке. Попробуйте это один раз.
источник
Пожалуйста, используйте этот код
источник
Используйте параметр NSCaseInsensitiveSearch с rangeOfString: параметры:
Выходной результат найден: Да
Параметры могут быть «или» вместе и включают в себя:
NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsПоиск и более
источник
Первая строка содержит или нет вторую строку,
источник
Попробуй это:
Swift 4.1, 4.2:
Для Objective-C:
источник
Свифт 4 и выше
Objective-C
источник
источник
String
типа. Во-вторых, у нас есть все объекты. Так что в качестве аргумента вы должны передатьNSString
. Я голосую за удаление из-за низкого качества ответа на очень активный вопрос.Если требуется определенное положение строки, этот код появляется в Swift 3.0 :
источник