Uni*_*orn 1 cocoa objective-c nsstring ios
我对Objective C有点新意,并想知道是否有更好的方法来计算字符串中的单词.
即:
NSString *str = @"this is a string";
// return should be 4 words ..
Run Code Online (Sandbox Code Playgroud)
我现在如何做的方法是将字符串分解为单词space('')字符数组并计算数组.
任何建议将不胜感激!谢谢!!:)
编辑:对于那些来这里寻找答案的人; 我发现了一篇类似的帖子,回复非常好.
有两种方法不涉及收集一系列单词,并且应该比仅仅打破空格更聪明:
enumerateSubstringsInRange:options:usingBlock:方法.在iOS 4.0中引入Cocoa Touch.即使我确实想收集或以其他方式使用这些词,我也会使用其中一种.
您确定在该部分代码中存在瓶颈吗?如果不是(这很可能),那么拆分空间似乎完全可以接受.您可以创建一个C字符串并计算空格,但很多时候这样的"优化"版本实际上比原始版本慢.也就是说,假设您当前的代码如下所示:
NSUInteger wordCount = [[someString componentsSeparatedByString:@" "] count];
Run Code Online (Sandbox Code Playgroud)
这不完全正确(请参阅@"___"下划线是一个空格),但也许您真的使用正则表达式并拆分\s+?
除非你每秒要做几百次,否则我会选择可读的解决方案,类似于下面的伪代码:
def count (str):
lastchar = " "
count = 0
for char as every character in string:
if char is not whitespace and lastchar is whitespace:
count = count + 1
lastchar = char
return count
Run Code Online (Sandbox Code Playgroud)
创建一个完整的其他字符串数组似乎有点浪费,所以你可以计算它们并扔掉它们.
如果由于某种原因,它成为一个问题,你可以用更快的版本替换函数体.但首先要确保它是一个问题.优化代码已经足够快就是浪费精力.
在这种情况下,我会像这样使用NSScanner:
NSString *str = @"this is a string";
NSScanner *scanner = [NSScanner scannerWithString:str];
NSCharacterSet *whiteSpace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSCharacterSet *nonWhitespace = [whiteSpace invertedSet];
int wordcount = 0;
while(![scanner isAtEnd])
{
[scanner scanUpToCharactersFromSet:nonWhitespace intoString:nil];
[scanner scanUpToCharactersFromSet:whitespace intoString:nil];
wordcount++;
}
Run Code Online (Sandbox Code Playgroud)
这只会创建两个额外的对象,无论字符串有多长.
| 归档时间: |
|
| 查看次数: |
3059 次 |
| 最近记录: |