使用NSScanner从最后一个字符实例扫描到字符串结尾

T3d*_*b0t 4 cocoa objective-c

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

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);       
}
Run Code Online (Sandbox Code Playgroud)

...这会在扫描到字符串末尾后导致段错误!我不确定为什么这不起作用.想法?提前致谢!

小智 11

NSString *thePath = @"new/path - path/path/03 - filename.ext";
NSString *lastPathComponent = [thePath lastPathComponent]; // "03 - filename.ext"
Run Code Online (Sandbox Code Playgroud)

编辑以回复您的后续行动.您不需要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];
Run Code Online (Sandbox Code Playgroud)