php - 多字符集替换算法

标签 php objective-c regex

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

-(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"
但是最好用不同的字符替换 * 。其他案例稍后可能会添加。


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

  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。只是没有我希望看到的那么简洁。

最佳答案

对我来说,更简单的解决方案是这个,但它可能没有最好的性能。

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/

相关文章:

javascript - .load 带有表单变量的页面

php - Ubuntu PHP5/Apache2 - 显示 500 错误而不是错误消息

ios - 无法使用 http URL 加载我的 WebView

objective-c - 用于比较核心数据属性的月份部分的谓词

regex - ColdFusion - 将正则表达式反向引用传递给函数调用

javascript - 正则表达式匹配 git log 中多次之间的任何内容

php - 使用 jQuery 序列化将 ajax 值放入数据库选择查询

c - 基本的 Objective-C 语法 : "%@"?

javascript - "hotkey string"的正则表达式

网站应用程序中的 JavaScript 错误导致其无法在 iPhone 上运行