我想在NSString中的一组字符前面添加一个特定字符。
例如:
NSString *input = @"abc^ 123 # //> <";
NSString *insertBefore = @"~";
NSCharacterSet *needBeInserted = [NSCharacterSet
characterSetWithCharactersInString:@"~#^/<>"];
预期结果:needBeInserted
中显示的input
中的所有字符都会添加insertBefore
。
result = @"abc~^ 123 ~# ~/~/~> ~<";
有优雅的方式吗?而不是使用多行stringByReplacingOccurrencesOfString
?
答案 0 :(得分:1)
您可以将您的字符放入character class并使用基于正则表达式的替换:
[~#^/<>]
替换为~$0
,其中$0
将整个匹配文本插入到结果字符串中。请参阅regex demo。
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中。您应该测试边缘情况和拼写错误。
另一种方法是从字符集中创建一个(单字母)字符串数组,并用转义字符组合替换它的出现。对我来说似乎更复杂,更不自然。