2011-06-24 43 views
-1

我想計算我的NSString的NSArray對象。我的NSArray有@"a",@"w"對象,我的字符串是@"abcdefgw"。我想知道我的字符串中有多少次有@"w"對象。找到字符串上的NSArray對象的數量

+0

我不確定你的意思。您可以通過發送一個「count」消息來獲取數組中的對象數量。您可以通過發送一個「長度」消息來獲取字符串中的字符數。 –

回答

2

您可以使用- (NSArray *)componentsSeparatedByString:(NSString *)separator,雖然這可能有邊界問題。您也可以使用stringByReplacingOccurrencesOfString:withString:這樣的:

NSString *shortString = [myString stringByReplacingOccurrencesOfString:@"w" withString:@""]; 
return mystring.length-shortString.length; 
+0

+1非常聰明。 –

+0

我喜歡這個,但是如果你允許多字符搜索,你必須除以搜索字符串的長度。 –

+0

感謝的人,它非常幫助我。 – mahyar

0

如果你正在尋找來算子,你將不得不尋找子則每次縮小範圍...類似。

-(NSInteger)occurrencesOfSubstring:(NSString *)substring inString:(NSString *)string 
{ 
    int occurrences =0; 

    NSRange searchRange = NSMakeRange(0, [string length]); 
    NSRange foundRange; 
    do { 
     foundRange = [string rangeOfString:substring options:NSCaseInsensitiveSearch range:searchRange]; 
     if ((foundRange.location != NSNotFound)) { 
      occurrences++; 
      searchRange.location = foundRange.location+foundRange.length; 
      searchRange.length = [string length] - (foundRange.location+foundRange.length); 
     } 
    }while (foundRange.location != NSNotFound);  

    return occurrences; 
} 
+0

這是**非常慢。只需運行字符串並檢查每個字符以避免「NSRange」的開銷就會更快。 – PengOne

+0

你爲什麼期望標量類型變慢?你是否描述過它? –

+0

是的。對我來說,重複使用'rangeOfString'比讀取每個字符慢50%左右。這是幾個月的時間,並且至少有一次iOS更新,因此現在性能可能會有所改善。對於這樣一個簡單的例子,我懷疑它有什麼不同。但是,如果這需要重複調​​用,它可能會變得昂貴。 – PengOne