Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取NSString在string-iOS中的位置_Ios_Objective C_String_Nsstring_Nsurl - Fatal编程技术网

获取NSString在string-iOS中的位置

获取NSString在string-iOS中的位置,ios,objective-c,string,nsstring,nsurl,Ios,Objective C,String,Nsstring,Nsurl,我正在开发一个iOS应用程序,我需要做的一件事就是浏览URL并用我自己的自定义协议替换第一个协议部分 如何删除“:/”之前NSString的前几个字符 例如,我需要转换以下内容: http://website.com --> cstp://website.com ftp://website.com --> oftp://website.com https://website.com --> ctcps://website.com 我面临的主要问题是,我不能从URL

我正在开发一个iOS应用程序,我需要做的一件事就是浏览URL并用我自己的自定义协议替换第一个协议部分

如何删除“:/”之前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];
您可以使用:

NSRange range = [urlString rangeOfString:@"://"];
range.location
将为您提供从
“:/”
开始的第一个索引,您可以将其用作:

NSString *newAddress = [urlString substringFromIndex:range.location];
并附加您的前缀:

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

http://website.com
是一个URL,
http
是URL的方案部分。我建议使用
NSURLComponents
类,该类专门用于此目的:检查、创建和修改URL:

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
如果案例数量增加,那么字典映射就更容易实现 管理:


http://website.com
是一个URL,
http
是URL的方案部分。我建议使用
NSURLComponents
类,该类专门用于此目的:检查、创建和修改URL:

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
如果案例数量增加,那么字典映射就更容易实现 管理:


非常感谢你。真的很有帮助:)非常感谢。真的很有帮助:)哇!这很有道理。只有一件事,当用户在没有方案的情况下复制URL链接时会发生什么。在我的例子中,我只是在它前面连接
http://
。但是此代码如何检测是否没有方案?@Supertecnoboff:
[[NSURLComponents alloc]initWithString:originalURL]
如果
originalURL
不是有效的URL,例如,如果方案丢失,则返回
nil
。Ok。非常感谢,我恐怕不能给你打勾,但我确实投票支持了你的答案。我认为这个方法比上面的方法可靠得多。再次感谢:)@Supertecnoboff:欢迎你(完全取决于你想接受哪个答案,没问题)!哇!这很有道理。只有一件事,当用户在没有方案的情况下复制URL链接时会发生什么。在我的例子中,我只是在它前面连接
http://
。但是此代码如何检测是否没有方案?@Supertecnoboff:
[[NSURLComponents alloc]initWithString:originalURL]
如果
originalURL
不是有效的URL,例如,如果方案丢失,则返回
nil
。Ok。非常感谢,我恐怕不能给你打勾,但我确实投票支持了你的答案。我认为这个方法比上面的方法可靠得多。再次感谢:)@Supertecnoboff:欢迎你(完全取决于你想接受哪个答案,没问题)!