2017-10-17 98 views
1

我想在NSString中的一组字符前添加特定字符。如何将特定字符添加到NSString中的一组字符

例如:

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

预期的结果:在needBeInserted出现在input任何字符将添加insertBefore

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

有没有一种优雅的方式来做到这一点?而不是使用多行stringByReplacingOccurrencesOfString

+0

使用['escapedPattern'](https://developer.apple.com/documentation/foundation/nsregularexpression/1408386-escapedpatternforstring?language= objc) –

+0

不幸的是,一些字符如:'<' , '>'不包括在内。 – user2131907

+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 ~# ~/~/~> ~<

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浏览器。您应该测试是否出现边缘案例和拼写错误。

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

相关问题