我想替换文本中所有的多个空格为单个空格。这应该是一个非常简单的任务,但出于某些原因,它返回的结果与预期不同。我已经阅读了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
然后应该将扫描器移动到非空格字符之前的空格字符。然后循环继续到结尾。
我缺少什么或者没有理解到什么?
nil
在那里能够正常工作;使用一个空的 NSCharacterSet 对象会更安全。创建一个空对象的一种方法是[NSCharacterSet characterSetWithRange:(NSRange){ ' ', 0 }]
。 - Peter Hoseynil
现在是可以使用的。skipSet - 用于在扫描值表示时忽略的字符集。传递nil以不忽略任何字符。
- christophercotton