2011-01-18 10 views

答えて

8

は、以下が最も簡単な解決策になることがあります。

- (NSUInteger)numberOfWordsInString:(NSString *)str { 
    __block NSUInteger count = 0; 
    [str enumerateSubstringsInRange:NSMakeRange(0, [str length]) 
          options:NSStringEnumerationByWords|NSStringEnumerationSubstringNotRequired 
         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
     count++; 
    }]; 
    return count; 
} 

あなたはまたにNSStringEnumerationLocalizedを追加することができます単語分割を行うとき、あなたのアカウントに、現在のロケールを取りたい場合はオプション。

1

いつでもスペースの数を見つけて追加できます。より正確な1は、すべてのnonletter文字に入れなければならないだろう的には :カンマ、fullstops、空白文字など

[[string componentsSeparatedByString:@" "] count]; 
+0

はい、私はそれについてです。しかし、もし完全に停止した後にちょうど1の代わりに2つのスペースを使用すればどうなるでしょうか(私は今何をしていますか?) – TheAmateurProgrammer

+0

文字列を検索し、すべての二重スペースを単一のスペースに置き換えることができます。 [[[yourString stringByReplacingOccurrencesOfString:@ "" withString:@ ""] componentsSeparatedByString:@ ""]カウント]; – hauntsaninja

0

CFStringTokenizerはあなたの友達です。

1

NSTextStorageを使用する場合は、wordsメソッドを使用して単語数にすることができます。それは言葉をカウントするための最もメモリ効率の高い方法ではないかもしれませんが、それは句読点やその他の非単語文字を無視でかなり良い仕事をしていません:

NSString *input = @"one - two three four ."; 
NSTextStorage *storage = [[NSTextStorage alloc] initWithString:input]; 
NSLog(@"word count: %u", [[storage words] count]); 

出力はword count: 4になります。あなたが10.6以降を使っているのであれば

0

それを使用します。

NSArray *words = [theStorage words]; 
int wordCount = [words count]; 

はあなたの問題ということですか?

+1

この質問には、すでに* years * ago ...という回答があります。 – alestanis