2012-04-02 145 views
0

我正在瀏覽我的數組,並查找搜索到的單詞處於哪個索引處。我使用這些信息在單詞之間加入空格,直到達到下一個單詞。我保存該文本,然後將其存儲在一個變量中。字符串末尾多餘的空格

我懷疑lastObject和arr objectAtIndex之間的比較:我不工作,但我似乎無法弄清楚爲什麼?

NSArray * arr;

NSScanner *scanner = [NSScanner scannerWithString:_exerciseDocument]; 

while(![scanner isAtEnd]) 
{ 
    NSString *buffer; 
    if([scanner scanCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:&buffer]) 
     { 
      [scanner scanUpToString:" " intoString:&buffer];   
      [scanner scanString:@" " intoString:nil]; 
     } 
    else 
     { 

     } 

for(int i=0; i <arr.count; i++) 
{ 
    NSString *stringToCheck = (NSString *)[arr objectAtIndex:i]; 
    if([stringToCheck isEqualToString:@"Fokus:"]) 
    { 
     _descriptionIndex = i; 
    } 
    if([stringToCheck isEqualToString:@"Niveau:"]) 
    { 
     _focusIndex = i; 
    } 
    if([stringToCheck isEqualToString:@"Redskab:"]) 
    { 
     _niveauIndex = i; 
    } 
    if([stringToCheck isEqualToString:@"Vanddybde:"]) 
    { 
     _equipmentIndex = i; 
    } 
} 

_descriptiontToTextField = [[NSString alloc]init]; 
for(int i=1; i <_descriptionIndex; i++) 
{ 
    if(![[arr lastObject] isEqual:[arr objectAtIndex:i]]) 
    { 
     _descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:[ arr objectAtIndex:i]]; 
     _descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:@" "]; 
    } 
    else 
    { 
     _descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:[ arr objectAtIndex:i]]; 
    } 
} 
+0

你能提供一些預期輸入/輸出的例子嗎? – fbernardo 2012-04-02 17:51:40

回答

1

首先, -[NSString componentsSeparatedByCharactersInSet:]不按照您認爲的方式工作。如果_exerciseDocument中的單詞之間有多個空格,那麼最後會在arr中出現大量空字符串,這不是您想要的。您可能需要考慮使用NSScanner(默認情況下會跳過空格和換行符)來創建陣列。

其次,arr包含字符串,並且沒有其他類型的對象。鑑於此,您應該使用-[NSString isEqualToString:]來代替您的比較。

第三,是否有一個原因,你開始你的第二個循環在索引1而不是索引0?

+0

我知道我正在閱讀的文本文檔不會在每個單詞之間包含多個空格,所以這不應該是一個問題,但我很好奇你將如何使用NSScanner實現這個功能?我從索引1開始,因爲我不想將文件中的第一個單詞放入字符串中。 – 2012-04-02 22:29:45

+0

@NielsSønderbæk:你會用你的_exerciseDocument字符串設置你的掃描儀,首先去除前導和尾隨空格。您將使用(![scanner isAtEnd])實現一個while循環作爲條件。在循環內部,首先使用掃描器掃描+ [NSCharacterSet whitespaceAndNewlineCharacterSet]中的字符,並通過引用獲取字符串。然後,您將掃描空白字符和換行符,爲字符串引用傳遞NULL,因爲您不會關心這些字符。在讀入字符串時,將它們添加到可變數組中。 – trudyscousin 2012-04-02 22:41:18

+0

@NielsSønderbæk:這提供的唯一好處是能夠處理單詞之間的多個空格(正如您所指出的那樣,這不是問題)。但是,當你不能只依靠一個空間時,它運作得非常好。 – trudyscousin 2012-04-02 22:43:02

1

這if語句永遠結果爲YES,因爲你的for循環數組中到達最後一個對象之前,總是終止:我< _descriptionIndex。

1

我想你想在數組最後一個對象比較在礦井陣列中的所有對象,但的isEqual用來比較兩個對象類型不是對象的值,你可以看到

的NSArray * arr = [_exerciseDocument componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

這將創造ARR作爲字符串的陣列裝置的所有對象都是類型的[NSString類]

如果([[ARR lastObject] isEqual:方法[ARR objectAtIndex:I]]!)

,因爲所有的對象都是同一類型的isEqual的將返回true,那麼你的代碼將在因爲否定的其他部分運行,如果情況如此則應使用isEqualToString比較字符串