2015-10-20 66 views
0

我有一个长字符串,其中包含以百分号开头和结尾的关键字。例如:创建以字符串开头/结尾为%的关键字的NSArray

我的名字是%user_username%,我住在%location_address%。您可以拨打 到达%user_phone%

我会用什么方法来提取开头的所有字符串,并与%结束,并把那些到NSArray,这样我可以用自己正确的文本表示替换它们?

+0

修改的方法,你可以通过你的字符串中的字符循环,每次你到达你创建一个%字符一个新的NSMutableString并开始追加到后面的字符,直到到达下一个%字符为止,将NSMutableString添加到数组中 –

+0

这听起来像是一种昂贵的操作。 –

+0

你可以使用NSRegularExpression“%。*?%”和' - [matchesInString:options:range:]' – Willeke

回答

0

假设有你感兴趣的字符串(如“A%AB%B%C”)内部没有%迹象,您可以使用componentsSeparatedByString:componentsSeparatedByCharactersInSet:获得由%号分隔字符串数组。从那里,很容易找出数组中的哪些字符串在百分号之间,哪些是不必要的。

我认为内部虽然,这些方法可能实现为像寻找% s的循环。也许他们会对大字符串进行并行搜索,或者使用字符串内部结构的特殊知识来加快搜索速度 - 这是我能够加速搜索的唯一途径,假设您坚持保留所有内容在%分隔字符串中(如果速度确实是一个问题,那么答案可能是使用替代表示法)。

0

这是我想出了工作:

- (NSArray *)replaceKeywords:(NSString *)keywordString { 

    NSString *start = @"%"; 
    NSString *end =  @"%"; 
    NSMutableArray* strings = [NSMutableArray arrayWithCapacity:0]; 

    NSRange startRange = [keywordString rangeOfString:start]; 

    for(;;) { 

     if (startRange.location != NSNotFound) { 

      NSRange targetRange; 

      targetRange.location = startRange.location + startRange.length; 
      targetRange.length = [keywordString length] - targetRange.location; 

      NSRange endRange = [keywordString rangeOfString:end options:0 range:targetRange]; 

      if (endRange.location != NSNotFound) { 

       targetRange.length = endRange.location - targetRange.location; 
       [strings addObject:[keywordString substringWithRange:targetRange]]; 

       NSRange restOfString; 

       restOfString.location = endRange.location + endRange.length; 
       restOfString.length = [keywordString length] - restOfString.location; 

       startRange = [keywordString rangeOfString:start options:0 range:restOfString]; 

      } else { 
       break; 
      } 

     } else { 
      break; 
     } 

    } 

    return strings; 

} 

我稍微Get String Between Two Other Strings in ObjC

相关问题