Я пытаюсь заменить все несколько пробел в некотором тексте с одиночным пробелом. Это должно быть очень простой задачей, однако по некоторым причинам она возвращает другой результат, чем ожидалось. Я прочитал документы о 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
должен затем прогрессировать сканер мимо пробела до непробельных символов. И затем цикл продолжается в конец.
Что я пропускаю или не понимаю?
А, я понял! По умолчанию NSScanner пропускает пробелы!
Оказывается, вам просто нужно установить charactersToBeSkipped
на nil
:
[scanner setCharactersToBeSkipped:nil];