11 Stimmen

Seltsames Verhalten von NSScanner bei der Entfernung von Leerzeichen (Whitespace)

Ich versuche, alle mehrfachen Leerzeichen in einem Text durch ein einzelnes Leerzeichen zu ersetzen. Dies sollte eine sehr einfache Aufgabe sein, aber aus irgendeinem Grund ist es ein anderes Ergebnis als erwartet zurück. Ich habe die Dokumente über den NSScanner gelesen und es scheint, dass er nicht richtig funktioniert!

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:@" "];
    }

}

Aber aus irgendeinem Grund ist das Ergebnis @"ThisisatestofNSScanner!" anstelle von @"This is a test of NSScanner !" .

Wenn man sich die Kommentare durchliest und weiß, was die einzelnen Zeilen bewirken sollen, scheint es einfach genug zu sein!? scanUpToCharactersFromSet sollte den Scanner anhalten, sobald er auf Leerzeichen stößt. scanCharactersFromSet sollte dann den Scanner über die Leerzeichen hinaus bis zu den Nicht-Leerzeichen vorantreiben. Und dann wird die Schleife bis zum Ende fortgesetzt.

Was habe ich übersehen oder nicht verstanden?

23voto

Michael Waterfall Punkte 20242

Ah, ich habe es herausgefunden! Standardmäßig überspringt der NSScanner Leerzeichen!

Es hat sich herausgestellt, dass man nur die charactersToBeSkipped a nil :

[scanner setCharactersToBeSkipped:nil];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X