-3

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

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";
4

3 回答 3

2

看看,NSScanner特别是scanUpToString:intoString:

于 2013-11-14T14:10:41.027 回答
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:@", "];
于 2013-11-14T13:46:13.783 回答
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];
}
于 2013-11-14T14:26:18.630 回答