EnumerateSubstrings NSString не включает символы - PullRequest
2 голосов
/ 28 февраля 2011

При использовании NSString enumerateSubstringsInRange:options:usingBlock: с параметрами, установленными как NSStringEnumerationByWords, он не включает такие символы, как /* или //, которые должны обрабатываться аналогично словам, поскольку они разделены пробелами.

Я также пытался использовать NSStringEnumerationByComposedCharacterSequences, но, кажется, он делает то же самое, даже без этой опции, он просто проходит каждую букву.

Не существует ли способа перечислить каждую подстроку через пробел? Это звучит так просто, но никак не может сделать это, используя enumerateSubstringsInRange:options:usingBlock:.

EDIT

Я также использовал опцию NSEnumerationReverse, чтобы пройти через подстроки назад.

1 Ответ

1 голос
/ 28 февраля 2011

Вы можете использовать NSScanner для чего-то подобного. Это довольно долгий путь, но если сообщения enumerate... не делают этого за вас, возможно, стоит посмотреть.

Например, вы можете сделать что-то вроде

NSString *output = nil;
NSCharacterSet *whitespaceCharSet = [NSCharacterSet whitespaceCharacterSet];

NSScanner *scanner = [[NSScanner alloc] initWithString:someString];

// should skip leading whitespace and read everything up to the next whitespace
[scanner scanUpToCharactersFromSet:whitespaceCharSet intoSring:&output];

[scanner release];

В некотором роде грубый пример, но документация для NSScanner довольно проста.

Редактировать: В качестве альтернативы, вы можете сделать что-то вроде этого:

NSString *someString = <...>; // get your string somehow

NSCharacterSet *charSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSArray *components = [someString componentsSeparatedByCharactersInSet:charSet];

[components
 enumerateObjectsWithOptions:NSEnumerationReverse
 usingBlock:^(id obj, NSUInteger index, BOOL *stop) {
        // do stuff
    }];
...