2010-08-30 151 views
3

我想在Objective-C中的字符串中替換多個元素。在不過Objective-C字符串替換

str_replace(array("itemtoreplace", "anotheritemtoreplace", "yetanotheritemtoreplace"), "replacedValue", $string); 

的Objective-C,我知道的唯一方法就是NSString的replaceOccurancesOfString:

在PHP中,你可以做到這一點。有沒有任何有效的方法來取代多個字符串?

這是我目前的解決方案(非常低效和..嗯......長)

NSString *newTitle = [[[itemTitleField.text stringByReplacingOccurrencesOfString:@"'" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@"'"] stringByReplacingOccurrencesOfString:@"^" withString:@""]; 

明白我的意思嗎?

感謝, 基督教斯圖爾特

+0

有沒有相當於對象 - 即PHP方法。試着打破你的方法調用三行,所以我們可以看到發生崩潰的確切位置。 – kubi 2010-08-30 01:24:05

+0

Kubi,謝謝你的回答。這並不是真正的困擾我的崩潰。它是整個交易的低效率(如果這是一個字)。 謝謝! Christian – 2010-08-30 01:28:04

回答

12

如果這是你經常要在這個程序或另一個程序中做的事情,也許做一個方法或條件循環來傳遞原始字符串和多維數組來保存字符串來查找/替換。也許不是最有效的,但這樣的事情:

// Original String 
NSString *originalString = @"My^ mother^ told me not to go' outside' to' play today. Why did I not listen to her?"; 

// Method Start 
// MutableArray of String-pairs Arrays 
NSMutableArray *arrayOfStringsToReplace = [NSMutableArray arrayWithObjects: 
              [NSArray arrayWithObjects:@"'",@"",nil], 
              [NSArray arrayWithObjects:@" ",@"'",nil], 
              [NSArray arrayWithObjects:@"^",@"",nil], 
              nil]; 

// For or while loop to Find and Replace strings 
while ([arrayOfStringsToReplace count] >= 1) { 
    originalString = [originalString stringByReplacingOccurrencesOfString:[[arrayOfStringsToReplace objectAtIndex:0] objectAtIndex:0] 
               withString:[[arrayOfStringsToReplace objectAtIndex:0] objectAtIndex:1]]; 
    [arrayOfStringsToReplace removeObjectAtIndex:0]; 
} 

// Method End 

輸出:

2010-08-29 19:03:15.127 StackOverflow[1214:a0f] My'mother'told'me'not'to'go'outside'to'play'today.'Why'did'I'not'listen'to'her? 
+0

嘿理查!驚人!我見過的最詳細的消息。 只是問 - 輸出是什麼?你是怎麼得到這個的?看起來完全像控制檯中的合法輸出 - 我的意思是 - a0f?你測試過了嗎? 非常感謝! – 2010-08-30 02:17:07

+0

輸出是在調用「方法」之後,NSLog(@「%@」,originalString); – Richard 2010-08-30 02:25:44

+0

我們是否必須發佈創建的臨時字符串? – gav 2013-01-24 19:51:34

-2

添加@給所有字符串的開始,在

withString:@"" 

它遺漏了幾個。

+0

這只是我在這裏輸入的問題。我修好了它。你知道一個有效的方法來做到這一點?非常感謝。 – 2010-08-30 01:27:29

0

考慮編寫自己的方法?對字符串進行Tokenize並逐個替換它們,實際上沒有比用O(n)替換字符串中的單詞更快的方法。

最多隻有一個循環。

+0

也是一個很好的答案。非常感謝:D – 2010-08-30 01:52:29

2

有沒有更緊湊的方式來寫這與可可框架。從代碼角度來看,它可能看起來效率低下,但實際上這種事情可能不會經常出現,除非您的輸入非常大,而且您經常這樣做,否則您不會因此而受到影響。考慮將它們分別寫在三行上,以便進行可讀性和鏈接。

如果你正在做一些關鍵性能要求批量替換的東西,你總是可以編寫自己的函數。這甚至會是一個有趣的面試問題。 :)

+0

偉大的綜合答案。我認爲我現在就去解決這個問題 - 我可能會回覆您關於自定義功能的信息:D。 – 2010-08-30 01:53:04