代码之家  ›  专栏  ›  技术社区  ›  Christian Stewart

目标-C字符串替换

  •  3
  • Christian Stewart  · 技术社区  · 14 年前

    我想在Objective-C中替换字符串中的多个元素。

    在PHP中,您可以这样做:

    str_replace(array("itemtoreplace", "anotheritemtoreplace", "yetanotheritemtoreplace"), "replacedValue", $string);
    

    但是在objective-c中,我知道的唯一方法是nsstring replaceCoccurancesofString。是否有任何有效的方法来替换多个字符串?

    这是我目前的解决方案(效率非常低,而且……好。。。长)

    NSString *newTitle = [[[itemTitleField.text stringByReplacingOccurrencesOfString:@"'" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@"'"] stringByReplacingOccurrencesOfString:@"^" withString:@""];
    

    明白我的意思吗?

    谢谢, 克里斯汀·斯图尔特

    4 回复  |  直到 14 年前
        1
  •  12
  •   Richard    14 年前

    如果这是您在这个程序或另一个程序中经常要做的事情,可以使用方法或条件循环来传递原始字符串,使用多维数组来保存字符串以查找/替换。可能不是最有效的,但像这样:

    // Original String
    NSString *originalString = @"My^ mother^ told me not to go' outside' to' play today. Why did I not listen to her?";
    
    // Method Start
    // MutableArray of String-pairs Arrays
    NSMutableArray *arrayOfStringsToReplace = [NSMutableArray arrayWithObjects:
                                               [NSArray arrayWithObjects:@"'",@"",nil], 
                                               [NSArray arrayWithObjects:@" ",@"'",nil], 
                                               [NSArray arrayWithObjects:@"^",@"",nil], 
                                               nil];
    
    // For or while loop to Find and Replace strings
    while ([arrayOfStringsToReplace count] >= 1) {
        originalString = [originalString stringByReplacingOccurrencesOfString:[[arrayOfStringsToReplace objectAtIndex:0] objectAtIndex:0]
                                                  withString:[[arrayOfStringsToReplace objectAtIndex:0] objectAtIndex:1]];
        [arrayOfStringsToReplace removeObjectAtIndex:0];
    }
    
    // Method End
    

    输出:

    2010-08-29 19:03:15.127 StackOverflow[1214:a0f] My'mother'told'me'not'to'go'outside'to'play'today.'Why'did'I'not'listen'to'her?
    
        2
  •  2
  •   Ben Zotto sberry    14 年前

    用Cocoa框架编写这篇文章没有更紧凑的方法了。从代码的角度来看,它可能看起来效率很低,但实际上,这类事情可能不会经常出现,而且除非您的输入非常大,并且您经常这样做,否则您不会因此而受苦。考虑将它们写在三行上以提高可读性,而不是像这样链接它们。

    如果您正在做一些性能关键的事情,需要像这样进行批替换,那么您总是可以编写自己的函数。这甚至是一个有趣的面试问题。:)

        3
  •  0
  •   rollsch    14 年前

    考虑过写自己的方法吗?将字符串标记化并遍历所有字符串,逐个替换,实际上没有比O(N)更快的方法来替换字符串中的单词。

    最多只能是一个for循环。

        4
  •  -2
  •   No one in particular    14 年前

    将@添加到所有字符串的开头,如中所示

    withString:@""
    

    有几件不见了。