如何将特定字符添加到 NSString 中的一组字符
How to add a specific character to a set of characters in a NSString
我想在 NSString 中的一组字符前面添加一个特定的字符。
例如:
NSString *input = @"abc^ 123 # //> <";
NSString *insertBefore = @"~";
NSCharacterSet *needBeInserted = [NSCharacterSet
characterSetWithCharactersInString:@"~#^/<>"];
预期结果:needBeInserted
中出现在input
中的任何字符将添加insertBefore
。
result = @"abc~^ 123 ~# ~/~/~> ~<";
有什么优雅的方法吗?而不是使用多行 stringByReplacingOccurrencesOfString
?
您必须搜索字符并替换它:
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 编写。您应该测试是否存在边缘情况和拼写错误。
另一种方法是从字符集中创建一个(单字母)字符串数组,并用转义字符的组合替换它的出现。对我来说似乎更复杂,更不自然。
您可以将字符放入 character class 并使用基于正则表达式的替换:
[~#^/<>]
替换为 ~[=12=]
,其中 [=13=]
将整个匹配文本插入到结果字符串中。见 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:@"~[=11=]"];
NSLog(@"%@", modifiedString);
结果:abc~^ 123 ~# ~/~/~> ~<
我想在 NSString 中的一组字符前面添加一个特定的字符。
例如:
NSString *input = @"abc^ 123 # //> <";
NSString *insertBefore = @"~";
NSCharacterSet *needBeInserted = [NSCharacterSet
characterSetWithCharactersInString:@"~#^/<>"];
预期结果:needBeInserted
中出现在input
中的任何字符将添加insertBefore
。
result = @"abc~^ 123 ~# ~/~/~> ~<";
有什么优雅的方法吗?而不是使用多行 stringByReplacingOccurrencesOfString
?
您必须搜索字符并替换它:
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 编写。您应该测试是否存在边缘情况和拼写错误。
另一种方法是从字符集中创建一个(单字母)字符串数组,并用转义字符的组合替换它的出现。对我来说似乎更复杂,更不自然。
您可以将字符放入 character class 并使用基于正则表达式的替换:
[~#^/<>]
替换为 ~[=12=]
,其中 [=13=]
将整个匹配文本插入到结果字符串中。见 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:@"~[=11=]"];
NSLog(@"%@", modifiedString);
结果:abc~^ 123 ~# ~/~/~> ~<