在NSString中的每个单词上调用一个方法

Faz*_* Ya 5 string cocoa cocoa-touch objective-c nsstring

我想NSString在每个具有特定标准的单词上循环并调用自定义函数(例如,"has 2'L's").我想知道接近的最佳方式是什么.我应该使用查找/替换模式吗?块?

-(NSString *)convert:(NSString *)wordToConvert{
    /// This I have already written
    Return finalWord;
}

-(NSString *) method:(NSString *) sentenceContainingWords{
    // match every word that meets the criteria (for example the 2Ls) and replace it with what convert: does. 
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*ses 20

要列举的话在一个字符串,你应该使用-[NSString enumerateSubstringsInRange:options:usingBlock:]NSStringEnumerationByWordsNSStringEnumerationLocalized.列出的所有其他方法都使用一种识别单词的方法,这些单词可能不适合于语言环境或与系统定义相对应.例如,用逗号分隔但用空格分隔的两个单词(例如"foo,bar")不会被任何其他答案视为单独的单词,但它们在Cocoa文本视图中.

[aString enumerateSubstringsInRange:NSMakeRange(0, [aString length])
                            options:NSStringEnumerationByWords | NSStringEnumerationLocalized
                         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){
    if ([substring rangeOfString:@"ll" options:NSCaseInsensitiveSearch].location != NSNotFound)
        /* do whatever */;
}];
Run Code Online (Sandbox Code Playgroud)

至于记录的-enumerateSubstringsInRange:options:usingBlock:,如果你把它在一个可变的字符串,你可以放心地发生变异的字符串被枚举enclosingRange.所以,如果你想要替换匹配的单词,你可以使用类似的东西[aString replaceCharactersInRange:substringRange withString:replacementString].


Jef*_*mas 1

我知道的两种适合您的循环数组的方法如下:

\n\n
NSArray *words = [sentence componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n\nfor (NSString *word in words)\n{\n    NSString *transformedWord = [obj method:word];\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
NSArray *words = [sentence componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n\n[words enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id word, NSUInteger idx, BOOL *stop){\n    NSString *transformedWord = [obj method:word];\n}];\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一种方法,\xe2\x80\x93makeObjectsPerformSelector:withObject:,对你不起作用。它期望能够调用[word method:obj]与您期望的相反的调用。

\n