Подтвердить что ты не робот

Как найти beginwith слово в строке с использованием NSPredicate?

Я ищу решение о том, как отформатировать NSPredicate для поиска правильного слова в строке текста. В настоящее время я использую этот код:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"(content CONTAINS[c] %@)", word];

но он возвращает неверные значения, если слово короткое, например: если слово "ail", оно вернет все строки со словами, которые включают эти 3 буквы. Но мне не нужен такой абстрактный поиск, так как искать слова "начинается с" моего слова в строке "

4b9b3361

Ответ 1

Просто используйте BEGINSWITH вместо CONTAINS.

Edit

Если вам нужно искать в каждом слове строки, есть методика, которая была представлена ​​в одном из разговоров в WWDC 2010. Основная идея заключается в создании отдельного объекта Word, который содержит одно слово и ссылку на содержащий объект (объект, который вы ищете). Затем вы выполняете поиск в объекте Word и возвращаете объекты, связанные с найденными словами.

Затем запрос будет выглядеть примерно так (при условии, что у вас есть отношение "один к одному" между вашим объектом и Word: "ЛЮБЫЕ слова BEGINSWITH [c]% @"

Это означало бы, что вам нужно настроить слова при создании своих объектов.

Ответ 2

найдите сначала BEGINSWITH для "Foo" , это найдет вам начало строки

"Foo Word1 Word2", "Foo OtherWord1 OtherWord2" (will find 2)

и чем CONTAINS для "Foo" (обратите внимание на пробел перед Foo), который даст вам слова, начинающиеся с "Foo" , находящиеся под пробелом

"Word1 Foo Word", "Some OtherWord FooWord", "Misc    FooXWord" (will find 3)

Предикат:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"(content BEGINSWITH[c] %@) OR (content CONTAINS[c] %@)", word, [NSString stringWithFormat:@" %@", word]];

Ответ 3

У меня была такая же проблема, и сначала я подумал, что ваши ответы могут мне помочь, но они этого не сделали. Это помогло мне, так что... Посмотрите:

NSString *matchString =  [NSString stringWithFormat: @".*\\b%@.*",searchText];
NSString *predicateString = @"keyword MATCHES[c] %@";
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString];

Ответ 4

Если ваш текст содержит некоторые символы пунктуации между словами, вы можете использовать этот предикат:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                              @"(name BEGINSWITH[c] %@) OR (name MATCHES[c] %@)", 
                              query,
                              [NSString stringWithFormat:@".*[^\\w]%@.*", query]];