获取 NSString 在字符串中的位置 - iOS

Get position of NSString in string - iOS

我正在开发一个 iOS 应用程序,我需要做的事情之一是遍历 URLs 并将第一个协议部分替换为我自己的自定义协议。

如何删除 NSString 中“://”之前的前几个字符?

例如,我需要转换以下内容:

http://website.com  -->  cstp://website.com
ftp://website.com  -->  oftp://website.com
https://website.com  -->  ctcps://website.com

我面临的主要问题是,我不能只删除 URL 字符串中的前 'x' 个字符。在到达“://”字符之前,我必须检测有多少个字符。

那么如何计算从字符串开头到“://”字符有多少个字符?

一旦我知道这一点,我就可以简单地执行以下操作来删除字符:

int counter = ... number of characters ...
NSString *newAddress = [webURL substringFromIndex:counter];

谢谢你的时间,丹。

您可以使用:

NSRange range = [urlString rangeOfString:@"://"];

range.location 将为您提供 "://" 开始的第一个索引,您可以将其用作:

NSString *newAddress = [urlString substringFromIndex:range.location];

并附加您的前缀:

NSString *finalAddress = [NSString stringWithFormat:@"%@%@", prefixString, newAddress];

http://website.comURL,而 httpscheme 的一部分URL。我建议使用而不是字符串操作 NSURLComponents class 正是为此目的而制作的:检查、创建和修改 URLs:

NSString *originalURL = @"http://website.com";
NSURLComponents *urlcomp = [[NSURLComponents alloc] initWithString:originalURL];
if ([urlcomp.scheme isEqualToString:@"http"]) {
    urlcomp.scheme = @"cstp";
} else if ([urlcomp.scheme isEqualToString:@"ftp"]) {
    urlcomp.scheme = @"otfp";
}
// ... handle remaining cases ...

NSString *modifiedURL = [urlcomp string];
NSLog(@"%@", modifiedURL); // cstp://website.com

如果案例数量增加,那么字典映射更容易 管理:

NSDictionary *schemesMapping = @{
       @"http"  : @"cstp",
       @"ftp"   : @"otfp"
       @"https" : @"ctcps" };
NSURLComponents *urlcomp = [[NSURLComponents alloc] initWithString:originalURL];
NSString *newScheme = schemesMapping[urlcomp.scheme];
if (newScheme != nil) {
    urlcomp.scheme = newScheme;
}
NSString *modifiedURL = [urlcomp string];