获取 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.com
是 URL,而 http
是 scheme 的一部分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];
我正在开发一个 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.com
是 URL,而 http
是 scheme 的一部分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];