【问题标题】:Get position of NSString in string - iOS获取 NSString 在字符串中的位置 - iOS
【发布时间】:2015-07-29 20:15:15
【问题描述】:

我正在开发一个 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];

感谢您的宝贵时间,丹。

【问题讨论】:

    标签: ios objective-c string nsstring nsurl


    【解决方案1】:

    http://website.com 是一个 URLhttp 是 URL 的 scheme 部分。而不是字符串操作,我建议使用 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
    

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

    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];
    

    【讨论】:

    • 哇!这很有意义。只有一件事,当用户复制没有方案的 URL 链接时会怎样。就我而言,我只是在它前面连接http://。但是如果没有方案,这段代码将如何检测呢?
    • @Supertecnoboff: [[NSURLComponents alloc] initWithString:originalURL] 如果originalURL 不是有效的 URL,则返回 nil,例如如果缺少该方案。
    • 好吧,很有趣。非常感谢,恐怕我不能给你打勾,但我确实对你的答案投了赞成票。我认为这是比上述方法更可靠的方法。再次感谢:)
    • @Supertecnoboff:不客气(完全取决于您要接受哪个答案,完全没有问题)!
    【解决方案2】:

    你可以使用:

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

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

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

    并附加您的前缀:

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

    【讨论】:

    • 非常感谢。确实很有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2017-09-30
    相关资源
    最近更新 更多