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 は空白をスキップします!

に設定charactersToBeSkippedするだけでよいことが判明しましたnil

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