用可可中的字符替换子字符串

奥斯卡(Oscar Ekestorm)

我对Cocoa编程还很陌生,所以我很努力地创建一个程序,该程序将让用户在文本字段中输入文本,然后按一个按钮。当按下按钮时,该文本应将某些子字符串替换为某些字符。子字符串的长度都不超过2个字符,尽管有些子字符串的长度为单个字符。替换完成后,新获取的文本将被放置到另一个文本字段中。

子串替换的示例可以是:应该将“ n”更改为“ 5”,应该将“ nj”更改为“ g”,将“ ng”更改为“ s”。因此,文字“立即注射注射器!” 将更改为“触发syrise 5ow!”

如何以简单而优雅的方式实现这一目标?我尝试了以下代码,但似乎无法正常工作。

- (IBAction)convert:(id)sender {
    NSMutableString *x;
    [x setString:[self.input stringValue]];
    NSMutableString *output1;
    [output1 setString:@""];
    NSMutableString *middle;
    middle = [[NSMutableString alloc] init];
    int s;
    unsigned long length = [x length];
    for (s = 0; s < length; s = s + 1) {
        if (s + 2 <= length) {            // if more than or equal to two characters left
            [middle setString:[x substringWithRange:NSMakeRange(s, 2)]];
            if ([middle isEqualToString:@"nj"]) {
                [output1 appendToString:@"g"];
                s = s+1;
            } else if ([middle isEqualToString:@"ng"]) {
                [output1 appendToString:@"s"];
                s = s+1;
            } else {                      // if no two-character sequence matched
                [middle setString:[x substringWithRange:NSMakeRange(s, 1)]];
                if ([middle isEqualToString:@"n"]) {
                    [output1 appendString:@"5"];
                }
            }
        } else {                          // if less than two characters left
            [middle setString:[x substringWithRange:NSMakeRange(s, 1)]];
            if ([middle isEqualToString:@"n"]) {
                [output1 appendString:@"5"];
            }
        }
    }
    [self.output setStringValue:output1];
}

在这里,*x是文本的出发input地,*output1是结果的存储地,*middle由要测试的文本组成,input并且outputNSTextField

阿拉丁

我想您可以通过许多不同的方法来实现所需的功能。这是一个简单的例子:

  1. 定义值/替换的映射
  2. 按长度排序(最大长度优先)
  3. 匹配并替换

可能是这样的:

#import <Foundation/Foundation.h>

NSString * matchAndReplace(NSString *input, NSDictionary *map){

    NSMutableString *_input = [input mutableCopy];

    // Get all keys sorted by greatest length
    NSArray *keys = [map.allKeys sortedArrayUsingComparator: ^(NSString *key1, NSString *key2) {
        return [@(key2.length) compare:@(key1.length)];
    }];

    for (NSString *key in keys) {
        [_input replaceOccurrencesOfString:key
                                withString:map[key]
                                   options:NSLiteralSearch
                                     range:NSMakeRange(0,_input.length)];
    }
    return [_input copy];

};

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSDictionary *mapping = @{
            @"n": @"5",
            @"nj": @"g",
            @"ng": @"s"
        };

        NSString *input = @"Inject the syringe now!";

        NSLog(@"Output: %@", matchAndReplace(input, mapping));
    }
}

会产生:

输出:连接syrise 5ow!

注意:(显然)这是一种过于简化的方法,可以实现所需的功能,可能需要进行一些调整以涵盖每种情况,但它比您的版本更简单,希望对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用向量中的元素替换子字符串

来自分类Dev

用数组中的值替换子字符串

来自分类Dev

用sed替换子字符串

来自分类Dev

用python替换字符串中的子字符串

来自分类Dev

用特定值替换字符串中的子字符串jQuery

来自分类Dev

用python替换字符串中的子字符串

来自分类Dev

用影响字符串替换 Javascript 中的所有子字符串

来自分类Dev

用常量日期字符串替换 SQL 字符串中的静态子字符串

来自分类Dev

熊猫:替换字符串中的子字符串

来自分类Dev

无法替换字符串中的子字符串

来自分类Dev

替换字符串中的子字符串

来自分类Dev

用Java中的字符串替换字符串

来自分类Dev

用Excel中的字符串替换字符串

来自分类Dev

用空格字符替换子字符串

来自分类Dev

bash中的子字符串替换

来自分类Dev

在Matlab中替换子字符串

来自分类Dev

在swift中替换子字符串?

来自分类Dev

在python 3中用子字符串替换单个字符

来自分类Dev

Reg Expression用jQuery中的特殊字符替换子字符串

来自分类Dev

用更改的替换字符串替换子字符串

来自分类Dev

用更改的替换字符串替换子字符串

来自分类Dev

用已编辑的子字符串替换子字符串

来自分类Dev

用动态内容中的另一个字符串替换子字符串

来自分类Dev

用正则表达式替换字符串中的重复子字符串模式

来自分类Dev

用主字符串中的另一个值替换子字符串

来自分类Dev

用位置替换字符串中的字符

来自分类Dev

jQuery用未知字符替换text()中的字符串

来自分类Dev

用C中的字符替换字符串

来自分类Dev

用Lua中的索引替换字符串字符