2010-05-13 55 views
11

我試圖用一個空格替換一些文本中的所有多個空格。這應該是一個非常簡單的任務,但由於某種原因,它返回的結果與預期不同。我已經閱讀了NSScanner上的文檔,看起來它不能正常工作!NSScanner對簡單空白刪除的奇怪行爲

NSScanner *scanner = [[NSScanner alloc] initWithString:@"This is a test of NSScanner !"]; 
NSMutableString *result = [[NSMutableString alloc] init]; 
NSString *temp; 
NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet]; 
while (![scanner isAtEnd]) { 

    // Scan upto and stop before any whitespace 
    [scanner scanUpToCharactersFromSet:whitespace intoString:&temp]; 

    // Add all non whotespace characters to string 
    [result appendString:temp]; 

    // Scan past all whitespace and replace with a single space 
    if ([scanner scanCharactersFromSet:whitespace intoString:NULL]) { 
     [result appendString:@" "]; 
    } 

} 

但由於某些原因,結果是@"ThisisatestofNSScanner!"而不是@"This is a test of NSScanner !"

如果您通讀了評論以及每一行應該達到什麼,這似乎夠簡單! scanUpToCharactersFromSet應該停止掃描儀,因爲它遇到空白。 scanCharactersFromSet應該讓掃描器經過空白字符直到非空白字符。然後循環繼續到最後。

我錯過了什麼或不理解?

回答

22

啊,我想通了!默認情況下,NSScanner跳過空格!

原來你只需要設置charactersToBeSkippednil

[scanner setCharactersToBeSkipped:nil]; 
+1

文檔不保證'nil'將在那裏工作;改爲使用空的NSCharacterSet對象更安全。一種創建方法是'[NSCharacterSet characterSetWithRange:(NSRange){'',0}]''。 – 2010-05-14 09:59:37

+2

現在根據[documentation](http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSScanner_Class/Reference/Reference.html#//)可以看到'nil' apple_ref/occ/instm/NSScanner/setCharactersToBeSkipped :)。 skipSet - 掃描值表示時要忽略的字符。通過零不能忽略任何字符。「# – christophercotton 2010-07-26 02:39:24

+0

太好了,謝謝你,很好! – 2010-08-02 10:14:50