多字符集替换算法

时间:2013-09-13 16:45:17

标签: php objective-c regex

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

-(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.

e.g。

#define BAD_CHARS @"`^"
#define GOOD_CHAR @"|"
#define TEST @"Lor*em` ipsum dolor ^sit amet"
...
clean = [self spank:TEST];

console log: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. 其他一些更清洁,更简单的方法我还没想出来,但也许你有。

  6. 提前感谢任何建议。我确实使用了解决方案#2。只是没有我希望看到的简洁。

1 个答案:

答案 0 :(得分: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);