Как добавить определенный символ в набор символов в строке NSString
Я хочу добавить определенный символ перед набором символов в строке NSString.
Например:
NSString *input = @"abc^ 123 # //> <";
NSString *insertBefore = @"~";
NSCharacterSet *needBeInserted = [NSCharacterSet
characterSetWithCharactersInString:@"~#^/<>"];
Ожидаемый результат: любые символы в needBeInserted
что появляется в input
добавлю insertBefore
,
result = @"abc~^ 123 ~# ~/~/~> ~<";
Есть ли элегантный способ сделать это? Вместо использования нескольких строк stringByReplacingOccurrencesOfString
?
2 ответа
Вы можете поместить свои символы в класс символов и использовать замену на основе регулярных выражений:
[~#^/<>]
Заменить ~$0
где $0
вставляет весь текст совпадения в результирующую строку. Смотрите демо-версию регулярного выражения.
Посмотрите демонстрацию Objective-C онлайн:
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 ~# ~/~/~> ~<
Вы должны найти символы и заменить их:
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);
}
Написано в сафари. Вы должны проверить, если для крайних случаев и опечаток.
Другой способ - сделать массив (однобуквенных) строк из набора символов и заменить его вхождения комбинацией с escape-символом. Кажется, более сложным и менее естественным для меня.