我需要用单个字符替换一组字符。好的,没问题。有很多方法可以解决这个问题。目前,我正在实现以下内容:
-(NSString *)spank:(NSString *)string
{
NSCharacterSet *buggers = [NSCharacterSet characterSetWithCharactersInString:BAD_CHARS];
return [[string componentsSeparatedByCharactersInSet:buggers]
componentsJoinedByString:GOOD_CHAR];
}
我的问题是发现同一字符串中需要替换的其他字符集。
例如
#define BAD_CHARS @"`^"
#define GOOD_CHAR @"|"
#define TEST @"Lor*em` ipsum dolor ^sit amet"
...
clean = [self spank:TEST];
控制台日志:clean = "Lor*em| ipsum dolor |sit amet"
但是最好用不同的字符替换 * 。其他案例稍后可能会添加。
为了解决这个问题,我可以:
即使我更改了它的签名,也会对同一字符串重复发送消息。 (无聊、重复且低效)
-(NSString *)spank:(NSString *)string bad:(NSString *)badset good:(NSString *)good;
使用枚举。 (我已经成功实现了)
-(NSString *)spank:(NSString *)string { static NSDictionary *blackbook; if (!blackbook) blackbook = [NSDictionary dictionaryWithObjectsAndKeys: GOOD_CHAR_A, BAD_CHARS_A, GOOD_CHAR_B, BAD_CHARS_B, nil]; __block NSString *pure = string; [blackbook enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSCharacterSet *buggers = [NSCharacterSet characterSetWithCharactersInString:key]; pure = [[pure componentsSeparatedByCharactersInSet:buggers] componentsJoinedByString:obj]; }]; return pure; }
从 NSCoder 实现编码器。这是我还没有探索过的领域。
使用 php。我可以选择在将字符串返回给客户端之前使用 php 清除该字符串。也许在那里会更容易完成。有什么想法吗?
我还没有想出其他更干净、更简单的方法,但也许你已经想出了。
预先感谢您的任何建议。我确实使用了解决方案#2。只是没有我希望看到的那么简洁。
最佳答案
对我来说,更简单的解决方案是这个,但它可能没有最好的性能。
NSString *text = @"Lor*em` ipsum dolor ^sit amet";
NSDictionary *dictionary = @{@"*":@"",@"^":@"",@"`":@""};
for (NSString *key in dictionary)
{
text = [text stringByReplacingOccurrencesOfString:key withString:dictionary[key]];
}
NSLog(@"TEXT : %@",text);
编辑1:
这也适用于我,至少对于那个例子
NSString *text = @"Lor*em` ipsum dolor ^sit amet";
NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"*^`"];
text = [[text componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
NSLog(@"TEXT : %@",text);
关于php - 多字符集替换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791312/