Ich versuche, alle mehrere Leerzeichen in einem Text mit einem Leerzeichen zu ersetzen. Dies sollte eine sehr einfache Aufgabe sein, aber aus irgendeinem Grund gibt es ein anderes Ergebnis zurück als erwartet. Ich habe die Dokumente auf dem NSScanner gelesen und es scheint, als ob es nicht richtig funktioniert!Seltsames Verhalten von NSScanner auf einfache Leerzeichen Entfernung
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 das Ergebnis ist @"ThisisatestofNSScanner!"
statt @"This is a test of NSScanner !"
.
Wenn Sie die Kommentare lesen und was jede Zeile zu erreichen, sollte es scheint einfach genug !? scanUpToCharactersFromSet
sollte den Scanner stoppen, sobald er auf Leerzeichen trifft. scanCharactersFromSet
sollte dann den Scanner über den Whitespace bis zu den Nicht-Whitespace Zeichen fortschreiten. Und dann geht die Schleife bis zum Ende weiter.
Was bin ich fehlt oder nicht zu verstehen?
Die Dokumentation garantiert nicht, dass 'nil' dort arbeiten werden; Es ist sicherer, stattdessen ein leeres NSCharacterSet-Objekt zu verwenden. Eine Möglichkeit, eine zu erstellen, wäre '[NSCharacterSet characterSetWithRange: (NSRange) {'', 0}]'. –
Sieht aus wie 'nil' in Ordnung ist jetzt nach der [Dokumentation] (http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSScanner_Class/Reference/Reference.html#// apple_ref/occ/instm/NSScanner/setCharactersToBeSkipped :). 'skipSet - Die Zeichen, die beim Scannen nach einer Wertdarstellung ignoriert werden sollen. Pass nil, um keine Zeichen zu ignorieren. – christophercotton
Großartig, danke dafür, guter Platz! –