2017-10-17 2 views
1

Ich möchte ein bestimmtes Zeichen vor einer Reihe von Zeichen in einem NSString einfügen.So fügen Sie einem Satz von Zeichen in einem NSString ein bestimmtes Zeichen hinzu

Zum Beispiel:

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

Erwartetes Ergebnis: alle Zeichen in needBeInserted, die in input erscheint wird insertBefore hinzufügen.

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

Gibt es einen eleganten Weg, es zu tun? Anstatt mehrere Zeilen von stringByReplacingOccurrencesOfString zu verwenden?

+0

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

+0

Leider sind einige Zeichen wie: '<' , '>' nicht enthalten. – user2131907

+0

Aber sie sind nicht speziell in einem Regex, sie müssen nicht entkommen. Bitte definieren Sie in der Frage Ihre genauen Anforderungen (welche Zeichen müssen Sie fliehen?). –

Antwort

1

Sie können Ihre Zeichen in ein character class setzen und einen regulären Ausdruck basierten Ersatz verwenden:

[~#^/<>] 

mit ~$0 ersetzen, wo $0 den ganzen Spiel Text in die resultierenden Zeichenfolge einfügt. Siehe die regex demo.

Siehe 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); 

Ergebnis: abc~^ 123 ~# ~/~/~> ~<

0

Sie haben die Zeichen suchen und ersetzen:

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); 
} 

in Safari Geschriebene. Sie sollten testen, ob für Randfälle und Tippfehler.

Eine andere Möglichkeit besteht darin, ein Array von (aus einem Buchstaben bestehenden) Strings aus dem Zeichensatz zu machen und das Vorkommen desselben durch eine Kombination mit dem Escape-Zeichen zu ersetzen. Scheint mir komplexer und weniger natürlich zu sein.

Verwandte Themen