2016-02-03 21 views
0

我想使用特定的字符串替換NSString中的某些類似單詞。例如:創建一組NSString與stringByReplacingOccurrencesOfString一起使用

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"

回答

2

你當然可以把你的搜索字符串放入一個集合中,遍歷集合,然後爲循環的每一步做一個搜索 - 替換。但是,這也是搜索列表中每個項目的字符串循環。

取而代之,您應該使用NSScanner,在找到匹配項時移動字符串。對於更長的源字符串,您會發現這個遠在效率更高的時間和空間。使用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現在包含從原始字符串的東西,替換爲你的目標短語。

相關問題