2

我需要用单个字符替换一组字符。好的 没问题。有很多方法可以解决这个问题。目前,我正在实施以下内容:

-(NSString *)spank:(NSString *)string
{
    NSCharacterSet *buggers = [NSCharacterSet characterSetWithCharactersInString:BAD_CHARS];
    return [[string componentsSeparatedByCharactersInSet:buggers]
                   componentsJoinedByString:GOOD_CHAR];
}

My problem is discovering other sets of characters that are in need of being replaced within that same string.

例如

#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"
但最好用不同的字符替换 *。其他情况可以稍后添加。


为了解决这个问题,我可以:

  1. 对同一个字符串重复发送消息,当然我改变了它的签名。(无聊、重复、低效)

    -(NSString *)spank:(NSString *)string bad:(NSString *)badset good:(NSString *)good;
    
  2. 使用枚举。(我已经成功实现了这个)

    -(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;
    }
    
  3. 从 NSCoder 实现一个编码器。这是一个我还没有探索过的领域。

  4. 使用 php。在将字符串返回给客户端之前,我可以选择使用 php 清除字符串。也许在那里会更容易完成。想法?

  5. 我还没有想出其他一些更清洁、更简单的方法,但也许你有。

在此先感谢您的任何建议。我确实有这个与解决方案#2一起使用。只是不像我想看到的那么简洁。

4

1 回答 1

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);
于 2013-09-13T19:17:40.880 回答