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
應該讓掃描器經過空白字符直到非空白字符。然後循環繼續到最後。
我錯過了什麼或不理解?
文檔不保證'nil'將在那裏工作;改爲使用空的NSCharacterSet對象更安全。一種創建方法是'[NSCharacterSet characterSetWithRange:(NSRange){'',0}]''。 – 2010-05-14 09:59:37
現在根據[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
太好了,謝謝你,很好! – 2010-08-02 10:14:50