0

有谁知道将 \n 添加到字符串时 NSScanner 是否会正确扫描?

例如,我有一个要扫描的字符串 (myString) "\nTest\nSuper\n"

NSScanner *scanner = [NSScanner scannerWithString:myString];
NSString *str = @"Super";
if( [scanner scanString:str intoString:nil] )
{
    //It never reaches here
}

任何想法为什么它看不到“超级”?当我没有 \n 符号时,这曾经有效。

谢谢

4

1 回答 1

1

-[NSScanner scanString:intoString:]返回NO是因为您尝试从字符串的开头进行扫描,并且子字符串 'Super' 没有出现在那里。

我将使用它来尝试说明会发生什么:

BOOL success;
NSString *whatDidIGet;

// 'success' is YES, and 'whatDidIGet' contains "Test\n"
whatDidIGet = nil;
success = [scanner scanUpToString:str intoString:&whatDidIGet];

// 'success' is YES, and 'whatDidIGet' contains "Super"
whatDidIGet = nil;
success = [scanner scanString:str intoString:&whatDidIGet];

// 'success' is NO, and 'whatDidIGet' is nil.
whatDidIGet = nil;
success = [scanner scanUpToString:str intoString:&whatDidIGet];

忽略第一个换行符的原因是您的扫描仪(您设置它的方式)默认忽略空格和换行符,因此它会跳过第一个。最后,再次,因为它跳过空格和换行符,whatDidIGet所以为零。

编辑:

如果您在实例化扫描仪后立即插入:

[scanner setCharactersToBeSkipped:[[[NSCharacterSet alloc] init] autorelease]];

whatDidIGet您会在第一次和第三次扫描中看到所有换行符。

在您的努力中向您致以最良好的祝愿。

于 2012-09-20T23:12:45.670 回答