【问题标题】:Objective C - Extract substring by finding first and second occurrence of a characterObjective C - 通过查找字符的第一次和第二次出现来提取子字符串
【发布时间】:2015-06-10 14:56:15
【问题描述】:

我正在尝试将我的 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]];

我做错了什么?

【问题讨论】:

  • 虽然适当的解决方案可能涉及NSScanner 或正则表达式,并且没有推荐它,但如果保证您的字符串具有这种形式,则简单的拆分可以完成工作:[urlToDecode componentsSeparatedByString:@"'"][1]跨度>

标签: objective-c nsmutablestring


【解决方案1】:

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

作为一个更简单的替代方案怎么样:

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

【讨论】:

    猜你喜欢
    • 2018-02-05
    • 2012-10-17
    • 2011-01-11
    • 1970-01-01
    • 2010-12-25
    • 2013-10-02
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多