函数来获取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"