与stringByDeletingLastPathComponent的子字符串结果混淆

时间:2019-02-20 15:34:41

标签: objective-c cocoa

我的代码

NSMutableString *s= (NSMutableString *)[@"http://www.yahoo.com/index.html" stringByDeletingLastPathComponent];

我期望s的结果是

http://www.yahoo.com

但show s上面的代码是:

http:/www.yahoo.com

欢迎评论

2 个答案:

答案 0 :(得分:3)

您应该使用NSURL,而不是NSString

NSURL *url = [[NSURL URLWithString:@"http://www.yahoo.com/index.html"] URLByDeletingLastPathComponent];

屈服:

  

http://www.yahoo.com/

如果您绝对需要一个字符串,则可以执行以下操作:

NSString *urlString = url.absoluteString;

或者,如果您确实需要可变字符串,请不要将其强制转换为NSMutableString,但要创建可变副本:

NSMutableString *urlString = [url.absoluteString mutableCopy];

但是,通常,在可能的情况下,在处理URL时应坚持使用NSURL。并尝试使用文件路径时,请改用文件URL。

答案 1 :(得分:0)

此方法的注释解释如下。

Apple Document:请注意,此方法仅适用于文件路径(不适用于URL的字符串表示形式)。

但是您的字符串显然是完整的URL地址,不属于文件路径,因此我们将使用URL分类URLByDeletingLastPathComponent来将它们组装为URL

NSString *urlString = @"http://www.yahoo.com/index.html";
NSURL* URL = [NSURL URLWithString: urlString];
NSURL* lastPathUrl = [URL URLByDeletingLastPathComponent];
NSString* lastPathString = lastPathUrl.absoluteString;

NSLog(@"---%@---", lastPathString);