iOS - 如何在字符串中的特定位置插入字符?

时间:2012-07-26 11:41:09

标签: iphone objective-c ios nsstring

我的网址看起来像这样:“http://www.thisIsMyLink.com/afAFFgsfFGsgsdfgds.jpg

问题是我需要在“.jpg”之前的网址末尾添加“_s”。所以我需要的是:http://www.thisIsMyLink.com/afAFFgsfFGsgsdfgds_s.jpg

我找到了一种方法将特定字符放在字符串中,如下所示:

NSMutableString *mu = [NSMutableString stringWithString:myUrl];
[mu insertString:@"_s" atIndex:5];

将在字符串内的第5个字符中添加“_s”。问题是,由于标识符出现在“.jpg”之前,我不知道每次链接的长度,所以我需要的是始终在结尾之前放置“_s”4个字符,以便它出现就在“.jpg”之前。

我该怎么做?

感谢您阅读我的帖子:)

5 个答案:

答案 0 :(得分:4)

这个怎么样:

NSMutableString *mu = [NSMutableString stringWithString:myUrl];
[mu insertString:@"_s" atIndex:[mu length] - 4];

但是,您应该确保[mu length]始终> = 4。

可能有一些聪明的方法可以做到这一点,但是您没有指定如何从中获取原始网址。一种选择是使用stringWithFormat模块化地构建字符串。

答案 1 :(得分:3)

这是另一个适用于任何扩展名(例如.jpeg)的内容:

NSString *test = @"www.thisIsMyLink.com/afAFFgsfFGsgsdfgds.jpg";
NSString *ext = [test pathExtension]; // This is .jpg in this case
NSString *out = [[[test stringByDeletingPathExtension] stringByAppendingString:@"_s"] stringByAppendingPathExtension:ext];

所以这里的逻辑是:

  1. 获取路径的扩展程序
  2. 删除附加信息
  3. 添加字符串
  4. 添加扩展程序
  5. 这样你就可以避免依赖任何假设(比如你总是有3个字母的扩展名)。最糟糕的情况是,根本没有扩展,并以一个带有字符串的路径结束。我希望这有所帮助。

答案 2 :(得分:1)

试试这个:

[mu insertString:@"_s" atIndex:[mu length] - 3];

未测试。

答案 3 :(得分:1)

使用“_s.jpg”替换最后一个“.jpg”实例不区分大小写。由于某种原因,如果你在网址的其他地方有“.jpg”,这可以避免网址损坏。

NSString *extension = @".jpg";
NSMutableString *mu = [NSMutableString stringWithString:myUrl];
[mu insertString@"_s" atIndex[[[url lowercaseString] rangeOfString:extension options:NSBackwardsSearch].location];

答案 4 :(得分:0)

NSString有一个名为length的方法,它返回字符串的长度。减去扩展名的长度(4),你就有了起始索引。

相关问题