用不同的值替换字符串的出现次数

时间:2013-11-14 13:40:11

标签: ios iphone objective-c replace nsstring

我找不到并想到一种如何替换字符串出现的方法。我有

NSString *str = @"abc abc abc abc abc";

改变后我需要这样:

NSString *str = @"aaa1,aaa2,aaa1,aaa2,aaa1";

我猜使用stringByReplacingOccurrencesOfString不适合,所以我该怎么办?

感谢任何帮助,提前谢谢!

修改 对不起我没有提到,逻辑是用aaa1替换第一个找到的值,用aaa2找到第二个值,然后蚂蚁再次相同。 我想我可以这样表现出来:

 if ((the number of founded string) %2 == 0)
    replace with aaa1
 else 
    replace with aaa2

EDIT2 更多示例字符串和输出

str = @"abc text abc more text abc";
outputStr = @"aaa1 text aaa2 more text aaa1";

str1 = @"abcabcabcabcabc";
str1output = @"aaa1aaa2aaa1aaa2aaa1";

3 个答案:

答案 0 :(得分:2)

您可以将其用于:

NSArray *myArray = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];

之后,您将获得一个NSArray,其中包含逗号分隔的所有字符串组件。例如,[myArray objectAtIndex: 0]将等于abc等。之后,您可以使用所需的对象替换数组中的对象。

for (int i=0; i < [myArray count]; i++) {
//Do the changes here. for example

    if (i/2 == 0){
       //add aa2
       } else {
         //add aa1
       }
    }
}

最后,您可以使用:

再次使数组成为NSString
NSString * result = [myArray componentsJoinedByString:@", "];

答案 1 :(得分:2)

查看NSScanner,特别是scanUpToString:intoString:

答案 2 :(得分:1)

-(NSString *)parseString:(NSString *)string
{
    NSLog (@"Original input: %@", string);

    NSArray *stringParts = [string componentsSeparatedByString:@"abc"];

    NSLog (@"found %d parts", stringParts.count);

    for (NSString *part in stringParts)
    {
        NSLog (@"   '%@'",part);
    }

    NSMutableString *mResult = [[NSMutableString alloc] init];

    bool toggler = YES;
    bool lastWasEmpty = NO;

    for (NSString *part in stringParts)
    {
        if (!lastWasEmpty)
        {
            [mResult appendFormat:@"aaa%d",toggler?1:2];

            toggler = !toggler;
        }

        [mResult appendString:part];

        lastWasEmpty = !(part && (![part isEqualToString:@""]));
    }

    NSLog (@"Final result: %@", mResult);

    return [NSString stringWithString:mResult];
}