ma1*_*w28 6 objective-c nsstring word-count
什么是以下NSString类别方法的简单实现,它返回单词的数量self,其中单词由任意数量的连续空格或换行符分隔?此外,字符串将少于140个字符,因此在这种情况下,我更喜欢简单性和可读性,牺牲了一点性能.
@interface NSString (Additions)
- (NSUInteger)wordCount;
@end
Run Code Online (Sandbox Code Playgroud)
我找到了以下解决方案:
但是,有没有更简单的方法?
Sed*_*ien 15
为什么不做以下事情呢?
- (NSUInteger)wordCount {
NSCharacterSet *separators = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSArray *words = [self componentsSeparatedByCharactersInSet:separators];
NSIndexSet *separatorIndexes = [words indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return [obj isEqualToString:@""];
}];
return [words count] - [separatorIndexes count];
}
Run Code Online (Sandbox Code Playgroud)
我相信你已经确定了'最简单'.然而,要回答你原来的问题 - "以下NSString 类别的一个简单实现......",并将其直接发布在这里为后代:
@implementation NSString (GSBString)
- (NSUInteger)wordCount
{
__block int words = 0;
[self enumerateSubstringsInRange:NSMakeRange(0,self.length)
options:NSStringEnumerationByWords
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {words++;}];
return words;
}
@end
Run Code Online (Sandbox Code Playgroud)
有许多更简单的实现,但它们都有权衡.例如,Cocoa(但不是Cocoa Touch)的字数统计在:
- (NSUInteger)wordCount {
return [[NSSpellChecker sharedSpellChecker] countWordsInString:self language:nil];
}
Run Code Online (Sandbox Code Playgroud)
像扫描仪简单地使用一样精确计算单词也是微不足道的[[self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] count].但我发现该方法的性能会因较长的字符串而降低很多.
所以这取决于你想要做出的权衡.我发现绝对最快的只是直接上ICU.如果您想要最简单,使用现有代码可能比编写任何代码更简单.
| 归档时间: |
|
| 查看次数: |
8013 次 |
| 最近记录: |