11

我正在尝试用单个空格替换某些文本中的所有多个空格。这应该是一个非常简单的任务,但是由于某种原因,它返回的结果与预期的不同。我已经阅读了 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然后应该让扫描仪越过空格直到非空格字符。然后循环继续到最后。

我错过了什么或不理解什么?

4

1 回答 1

23

啊,我想通了!默认情况下,NSScanner 会跳过空格!

原来你只需要设置charactersToBeSkippednil

[scanner setCharactersToBeSkipped:nil];
于 2010-05-13T17:31:14.070 回答