【问题标题】:replace occurrences of string with different values用不同的值替换出现的字符串
【发布时间】:2013-11-14 13:40:10
【问题描述】:

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

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

【问题讨论】:

  • 这里的逻辑是什么,你如何决定输出字符串应该是什么?
  • 这是算命的应用吗?
  • @wattson12 抱歉,请参阅我的编辑
  • 现在这是有道理的。如果您甚至不关心实际的原始内容 - 只关心项目的数量 - 您可以计算出原始字符串中有多少项目并仅使用此信息构建结果。无需进行任何字符串替换。
  • 请添加更多输入字符串示例及其相应的输出。因为您刚才所说的意思是原始示例的输出必须是“aaa1,aaa2,aaa1,aaa2,aaa1”而不是“aaa1,aaa2,aaa1,aaa2,aaa1”——除非您还想从“随机文本”

标签: ios iphone objective-c replace nsstring


【解决方案1】:

你可以用它来:

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:@", "];

【讨论】:

  • 我的字符串可以是任何东西,我只是做了一个例子,我想用某个字符串替换第一个找到的值,用另一个替换第二个找到的值,然后再次重复此过程,请参阅我的编辑。谢谢
  • 没有标准模式的意思是什么?那么你会如何定义价值观呢?
  • 字符串可以不带逗号,也许我提供了一个不好的例子,对不起。请参阅 cmets 了解我的问题。
【解决方案2】:

看看NSScanner,特别是scanUpToString:intoString:

【讨论】:

    【解决方案3】:
    -(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];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2019-04-09
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2021-03-17
      相关资源
      最近更新 更多