2017-10-17 89 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瀏覽器。您應該測試是否出現邊緣案例和拼寫錯誤。

另一種方法是從字符集中創建一個(單字母)字符串數組,並用轉義字符組合替換它的出現位置。似乎對我來說更加複雜和不自然。