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:]与NSStringEnumerationByWords和NSStringEnumerationLocalized.列出的所有其他方法都使用一种识别单词的方法,这些单词可能不适合于语言环境或与系统定义相对应.例如,用逗号分隔但用空格分隔的两个单词(例如"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].
我知道的两种适合您的循环数组的方法如下:
\n\nNSArray *words = [sentence componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n\nfor (NSString *word in words)\n{\n NSString *transformedWord = [obj method:word];\n}\nRun Code Online (Sandbox Code Playgroud)\n\n和
\n\nNSArray *words = [sentence componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n\n[words enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id word, NSUInteger idx, BOOL *stop){\n NSString *transformedWord = [obj method:word];\n}];\nRun Code Online (Sandbox Code Playgroud)\n\n另一种方法,\xe2\x80\x93makeObjectsPerformSelector:withObject:,对你不起作用。它期望能够调用[word method:obj]与您期望的相反的调用。
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |