Objective C - 通过查找第一次和第二次出现的字符来提取子字符串

时间:2015-06-10 14:56:16

标签: objective-c nsmutablestring

我正在尝试将我的Android应用移植到iOS。我需要提取单引号'字符的第一次和第二次出现之间的字符串。

例如,从javascript:popUpWindow7('news_details.asp?slno=2029',620,300,100,100,'yes')开始,我需要提取news_details.asp?slno=2029

在Java中,我这样做了:

String inputUrl = "javascript:popUpWindow7('news_details.asp?slno=2029',620,300,100,100,'yes')";
StringBuilder url = new StringBuilder();
url.append(inputUrl.substring(inputUrl.indexOf('\'')+1, 
                inputUrl.indexOf('\'',inputUrl.indexOf('\'')+1)));

我无法在Objective C中找到与indexOf类似的任何方法,所以我做了以下内容:

NSUInteger length =0;
NSMutableString* url;

NSString* urlToDecode = @"javascript:popUpWindow7('news_details.asp?slno=2029',620,300,100,100,'yes')";

for (NSInteger i=[urlToDecode rangeOfString:@"\'"].location +1; i<urlToDecode.length; i++) {

    if([urlToDecode characterAtIndex:i]== '\'')
    {
        length = i;
        break;
    }
}

NSRange range = NSMakeRange([urlToDecode rangeOfString:@"\'"].location +1, length);

[url appendString:[urlToDecode substringWithRange:range]];

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的代码存在的问题是,您的范围length是从零位而非范围location计算的。范围length不是范围末尾的索引,而是范围的起始位置与其结束之间的距离。

这是一个更简单的替代方案:

NSArray *components = [urlToDecode componentsSeparatedByString:@"'"];
if (components.count > 1)
{
    NSString *substring = components[1];
}