Странное поведение NSScanner на простом пробельном удалении

Я пытаюсь заменить все несколько пробел в некотором тексте с одиночным пробелом. Это должно быть очень простой задачей, однако по некоторым причинам она возвращает другой результат, чем ожидалось. Я прочитал документы о 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 должен затем прогрессировать сканер мимо пробела до непробельных символов. И затем цикл продолжается в конец.

Что я пропускаю или не понимаю?

11
задан Mike Lischke 29 December 2013 в 12:47
поделиться

1 ответ

А, я понял! По умолчанию NSScanner пропускает пробелы!

Оказывается, вам просто нужно установить charactersToBeSkipped на nil :

[scanner setCharactersToBeSkipped:nil];
22
ответ дан 3 December 2019 в 05:11
поделиться