我正在尝试用单个空格替换某些文本中的所有多个空格。这应该是一个非常简单的任务,但是由于某种原因,它返回的结果与预期的有所不同。我已经阅读了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];