如何计算文本字符串中的单词?

Nqe*_*uew 1 objective-c nsstring ios

在iOS上,如何计算特定文本字符串中的单词?

ken*_*ytm 7

比分割更有效的方法是逐字符检查字符串.

int word_count(NSString* s) {
  CFCharacterSetRef alpha = CFCharacterSetGetPredefined(kCFCharacterSetAlphaNumeric);
  CFStringInlineBuffer buf;
  CFIndex len = CFStringGetLength((CFStringRef)s);
  CFStringInitInlineBuffer((CFStringRef)s, &buf, CFRangeMake(0, len));
  UniChar c;
  CFIndex i = 0;
  int word_count = 0;
  Boolean was_alpha = false, is_alpha;
  while (c = CFStringGetCharacterFromInlineBuffer(&buf, i++)) {
    is_alpha = CFCharacterSetIsCharacterMember(alpha, c);
    if (!is_alpha && was_alpha)
      ++ word_count;
    was_alpha = is_alpha;
  }
  if (is_alpha)
    ++ word_count;
  return word_count;
}
Run Code Online (Sandbox Code Playgroud)

@ ennuikiller的解决方案相比,计算一个1,000,000字的字符串需要:

  • 0.19秒构建字符串
  • 使用我的方法构建字符串+计数0.39秒.
  • 1.34秒使用ennuikiller的方法构建字符串+计数.

我的方法的最大缺点是它不是一个单行.