函数来获取URL的文件名

我有一些源代码来获取url的文件名

例如:

http://www.google.com/a.pdf

我希望得到a.pdf

因为join2个NSString的方法是'appendString',它只是在右侧添加一个string,所以我打算从string' http://www.google.com '的右侧逐个检查每个char /a.pdf ',当到达char'/'时,停止检查,返回stringfdp.a,之后我将fdp.a更改为a.pdf

源代码如下

-(NSMutableString *) getSubStringAfterH : originalString:(NSString *)s0 { NSInteger i,l; l=[s0 length]; NSMutableString *h=[[NSMutableString alloc] init]; NSMutableString *ttt=[[NSMutableString alloc] init ]; for(i=l-1;i>=0;i--) //check each char one by one from the right side of string 'http://www.google.com/a.pdf', when it reach at the char '/', stop { ttt=[s0 substringWithRange:NSMakeRange(i, 1)]; if([ttt isEqualToString:@"/"]) { break; } else { [h appendString:ttt]; } } [ttt release]; NSMutableString *h1=[[[NSMutableString alloc] initWithFormat:@""] autorelease]; for (i=[h length]-1;i>=0;i--) { NSMutableString *t1=[[NSMutableString alloc] init ]; t1=[h substringWithRange:NSMakeRange(i, 1)]; [h1 appendString:t1]; [t1 release]; } [h release]; return h1; } 

h1可以重写coordctstringa.pdf,但是如果它返回到它被调用的代码,一段时间后系统报告'double free ***在malloc_error_break中设置一个断点来debugging'

我查了很久,发现如果我删除了代码

ttt = [s0 substringWithRange:NSMakeRange(i,1)];

一切都会好(当然getSubStringAfterH不能返回我期望的结果结果),没有错误报告。

我试图修复几个小时的错误,但仍然没有线索。

欢迎任何评论

谢谢interdev

尝试这个:

编辑 :从打击评论

 NSString *url = @"http://www.google.com/a.pdf"; NSArray *parts = [url componentsSeparatedByString:@"/"]; NSString *filename = [parts lastObject]; 

如果url是一个NSString,那么下面一行代码就可以完成这个工作:

 NSString *filename = [url lastPathComponent]; 

如果url是一个NSURL,那么下面的工作:

 NSString *filename = [[url path] lastPathComponent]; 

我想如果你已经有了NSURL对象,那么从iOS 4起可以使用lastPathComponent方法。

 NSURL *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"]; NSString *filename = [url lastPathComponent]; 

这是更没有错误,并意味着获得URL中的本地化名称。

 NSString *localizedName = nil; [url getResourceValue:&localizedName forKey:NSURLLocalizedNameKey error:NULL]; 

我还没有尝试过,但似乎你可能会努力做到这一点。 iPhone库有NSURL类,我想你可以简单地做:

 NSString *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"]; NSString *path = [url path]; 

绝对寻找一个内置的function。 图书馆有更多的testing,并且比一般或者我会在一两个小时内写的东西(一般来说)更好地处理边缘案例。

Swift 3

假设您的url是http://www.google.com/a.pdf

  let filename = url.lastPathComponent \\filename = "a.pdf"