2013-07-16 2 views
0

Я ищу метод Objective-C, который найдет определенное слово внутри строки. Я использовал:Метод, который находит точное слово в атрибутной строке

- (NSRange)rangeOfString:(NSString *)aString 

но это не совсем то, что я хочу. Причина в том, что я ищу больше для токена, чем поиск самого слова. Я работаю с атрибутированными строками, и мне нужны определенные части строки для атрибутов. Части, которые нуждаются в атрибутах, должны быть равны содержимому объекта. Проблема, с которой я сталкиваюсь, заключается в том, что если у меня есть объект с содержимым «звезда», но слово «звезды» также находится в строке, метод диапазона просто вернет диапазон «звезда» и оставьте s , а не определять, существует ли в строке точное слово «звезда».

Я не уверен, существует ли такой способ, но я был бы очень признателен за любую помощь! Если вам нужны какие-либо другие разъяснения, пожалуйста, дайте мне знать!

редактировать: Чтобы помочь немного я дам вам мою точную ситуацию:

У меня есть карточная игра, которая соответствует 3 карты. В этом примере предположим, что карта имеет на ней. Нет двух одинаковых карт. Выбор карт в порядке «■■», «■■■» и «■■» приведет к возникновению проблемы. Как я уже сказал, содержимое нужно отнести. Проблема в том, что, поскольку на нем есть две карты, которые имеют «■■», а один - с «■■■», атрибуты помещаются в первый «■■» штраф, но затем устанавливается карта «■■■» с атрибутами карт «■■» на первых двух квадратах, а окончательная карта «■■» никогда не получает на нем ничего. Поэтому проблема заключается в том, что она находит первую подстроку «■■», даже если она отличается от большего слова. Мне нужно только посмотреть на слова/токены внутри строки, которая точно соответствует содержимому.

ответ

1

Похоже посильная задача для регулярных выражений (очень редкая птица!):

NSRange token = [string rangeOfString:@"\\bstar\\b" options:NSRegularExpressionSearch]; 
+0

я смотрю на этот метод, но я не был уверен, если он будет в состоянии помочь этой ситуации. Я сделал редактирование оригинального сообщения, чтобы дать дополнительную ясность в моей ситуации. – Jonathan

0

Вы можете превратить приписываемое строку в обычную строку с [attributedString string] и продолжайте как обычно с NSStringEnumerationByWords. Пример, учитывая ... звезды ... звезда ... она должна вернуть звезду, но не звезды.

[[s string] enumerateSubstringsInRange:NSMakeRange(0, [s length]) 
         options:NSStringEnumerationByWords 
        usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
    if ([substring isEqualToString:@"star"]){ 
     NSLog(@"%@", substring); 
     *stop = YES; 
    } 
}]; 

(не уверен, если я правильно понял ваш пример карты)