如何将特定字符添加到NSString中的一组字符

时间:2017-10-17 17:44:12

标签: objective-c nsstring nsregularexpression

我想在NSString中的一组字符前面添加一个特定字符。

例如:

NSString *input = @"abc^ 123 # //> <";    
NSString *insertBefore = @"~";
NSCharacterSet *needBeInserted = [NSCharacterSet 
                        characterSetWithCharactersInString:@"~#^/<>"];

预期结果:needBeInserted中显示的input中的所有字符都会添加insertBefore

result = @"abc~^ 123 ~# ~/~/~> ~<";

有优雅的方式吗?而不是使用多行stringByReplacingOccurrencesOfString

2 个答案:

答案 0 :(得分:1)

您可以将您的字符放入character class并使用基于正则表达式的替换:

[~#^/<>]

替换为~$0,其中$0将整个匹配文本插入到结果字符串中。请参阅regex demo

请参阅Objective-C demo online

NSError *error = nil;
NSString *input = @"abc^ 123 # //> <";
NSString *pat = @"[~#^/<>]";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pat options:nil error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:input 
        options:0 
        range:NSMakeRange(0, [input length]) 
        withTemplate:@"~$0"];
NSLog(@"%@", modifiedString);

结果:abc~^ 123 ~# ~/~/~> ~<

答案 1 :(得分:0)

您必须搜索字符并替换它:

NSRange searchRange = NSMakeRange( 0,[input length] );
NSRange charRange;
while( (charRange = [input rangeOfCharactersFromSet:escapeSet options:NSBackwardSearch).length range:searchRange)
{
  // It is allowed to have a 0-length range: Insertion
  input = [input stringByReplacingCharactersInRange:NSMakeRange(charRange.location, 0) withString:@"\"];

  // Shorten the search range
  searchRange = NSMakeRange(0, charRange.location);
}

写在Safari中。您应该测试边缘情况和拼写错误。

另一种方法是从字符集中创建一个(单字母)字符串数组,并用转义字符组合替换它的出现。对我来说似乎更复杂,更不自然。