Estoy tratando de reemplazar todos los espacios en blanco múltiples en algún texto con un solo espacio. Esta debería ser una tarea muy simple, sin embargo, por alguna razón, está devolviendo un resultado diferente del esperado. ¡He leído los documentos en el NSScanner y parece que no funciona correctamente!Comportamiento extraño de NSScanner en la eliminación simple de espacio en blanco
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:@" "];
}
}
Pero por alguna razón, el resultado es @"ThisisatestofNSScanner!"
en lugar de @"This is a test of NSScanner !"
.
Si lee los comentarios y lo que cada línea debe lograr, ¡parece lo suficientemente simple !? scanUpToCharactersFromSet
debe detener el escáner justo cuando encuentra espacios en blanco. scanCharactersFromSet
debe hacer avanzar el escáner más allá de los espacios en blanco hasta los caracteres que no sean de espacio en blanco. Y luego el ciclo continúa hasta el final.
¿Qué me estoy perdiendo o no entendiendo?
La documentación no garantiza que las negativas 'trabajará allí; es más seguro usar un objeto NSCharacterSet vacío en su lugar. Una forma de crear uno sería '[NSCharacterSet characterSetWithRange: (NSRange) {'', 0}]'. –
Parece que 'nil' está bien ahora según la [documentación] (http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSScanner_Class/Reference/Reference.html#// apple_ref/occ/instm/NSScanner/setCharactersToBeSkipped :). 'skipSet: los caracteres a ignorar cuando se busca una representación de valores. Pase nil para no ignorar ningún personaje. – christophercotton
¡Genial, gracias por eso, buen lugar! –