【问题标题】:Create a set/array of NSString's to use with stringByReplacingOccurrencesOfString创建一组 NSString 以与 stringByReplacingOccurrencesOfString 一起使用
【发布时间】:2016-02-03 20:06:30
【问题描述】:

我想用特定的字符串替换我的NSString 中的某些相似词。例如:

stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"Hello" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"hello" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"Hey" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"hey" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"Hi" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"hi" withString:@"Top o' de marnin ter yer"];

这显然不是很有效,而且我很难想出一个解决方案。

是否可以将这些NSString 放在一个数组或某种字符串集中,所以生成的代码看起来更像:

stringToChange = [stringToChange stringByReplacingOccurrencesOfString:arrayOfStrings withString:@"Top o' de marnin ter yer"];

其中arrayOfStrings 将包含@"Hello", @"hello", @"Hey", @"hey", @"Hi", @"hi"

【问题讨论】:

    标签: ios objective-c replace nsstring


    【解决方案1】:

    您当然可以将您的搜索字符串放入一个集合中,循环遍历该集合,然后对循环的每个步骤进行搜索和替换。但这也是搜索列表中每个项目的字符串循环。

    相反,您应该使用NSScanner,在找到匹配项时在字符串中移动。对于较长的源字符串,您会发现这 far 在时间和空间上都更有效。使用stringByReplacingOccurrencesOfString:withString: 每次都会创建一个新字符串;您当然可以通过首先转换为 NSMutableString 并使用 replaceOccurrencesOfString:withString:options:range: 来改善这一点

    以下是如何使用扫描仪:

    NSScanner * scanner = [NSScanner scannerWithString:source];
    NSMutableString * fixedUpString = [NSMutableString string];
    
    NSArray * searchStrings = @[/* The items you want to remove */];
    NSString * replacementString = /* The new material */;
    
    while( ![scanner isAtEnd] ){
    
        // Moving through the string, try each search in turn
        for( NSString * searchString in searchStrings ){
    
            // If there's a match, save what's been scanned up to that point
            NSString * scanned;
            if( [scanner scanUpToString:searchString intoString:&scanned] ){
    
                [fixedUpString appendString:scanned];
                // and add the new material
                [fixedUpString appendString:replacementString];
                // Move past the searched piece and continue
                [scanner scanString:searchString intoString:NULL];
            }
        }
    }
    

    fixedUpString 现在包含原始字符串中的所有内容,并替换了您的目标短语。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多