2010-03-20 54 views
4

给定一个字符串,例如:“new/path - path/path/03 - filename.ext”,如何使用NSScanner(或任何其他方法)返回从最后一个“/”到字符串结尾的子字符串,即“03 - filename.ext”?我一直试图从开始的代码是:使用NSScanner从字符的最后一个实例扫描到字符串的末尾

while ([fileScanner isAtEnd] == NO){ 
    slashPresent = [fileScanner scanUpToString:@"/" intoString:NULL]; 
    if (slashPresent == YES) { 
     [fileScanner scanString:@"/" intoString:NULL]; 
     lastPosition = [fileScanner scanLocation]; 
    } 
    NSLog(@"fileScanner position: %d", [fileScanner scanLocation]); 
    NSLog(@"lastPosition: %d", lastPosition);  
} 

...这会导致seg错误后扫描到字符串的结尾!我不知道为什么这不起作用。想法?提前致谢!

+0

注:我已经发现[NSString lastPathComponent],它完美的工作。但是,我的问题仍然是如何使用NSScanner来做这件事。 – T3db0t 2010-03-20 01:45:51

+0

您可以发布实际导致段错误的行吗?你说这是在这个循环之后发生的。 – 2010-03-20 01:48:05

回答

11
NSString *thePath = @"new/path - path/path/03 - filename.ext"; 
NSString *lastPathComponent = [thePath lastPathComponent]; // "03 - filename.ext" 

编辑回复您的后续行动。你不需要NSScanner:

NSString *thePath = @"new/path - path/path/03 - filename.ext"; 
NSRange theRange = [thePath rangeOfString:@"/" options:NSBackwardsSearch]; 
NSString *lastPathComponent = nil; 
if (theRange.location != NSNotFound) 
    lastPathComponent = [thePath substringFromIndex:theRange.location]; 
+0

又被殴打到答案。 :) – 2010-03-20 01:45:29