2009-07-07 87 views
1

目前我正在研究一款軟件,該軟件目前使用iPhone 3.0 SDK在Objective-C中編寫爲100%。Objective-C字符串操作

我已經來到了一個十字路口,我需要做相當多的或字符串連接,更具體地說,NSString的級聯和到目前爲止,我一直在做這樣的:

Objective-C的字符串連接:現在

NSString *resultantString = (NSMutableString*)[@"Hello " stringByAppendingString: @"World"]; 

,你可以想像這變得相當困難,當我試圖串聯6個NSString的共同閱讀。

起初我設想一個Objective-C++類混合做我的字符串連接,並交回給我的Objective-C類的話,我可以使用C++的簡單的字符串連接,如:

C++字符串連接:

string cppString = "Hello" + "World" + "see" + "easy!"; 

我可以使用ç字符數組,但是這將是一個小更難以閱讀。

然後,它讓我感到我可以在Cocoa中使用Python或Ruby橋(它提供了正則表達式和卓越的字符串處理比C語言的額外好處)。

即使我只編寫了少量的Ruby和Python,這對我來說也是有意義的,因爲它們被稱爲字符串操作語言。 Perl我決定跳過,因爲它在Xcode中不直接支持。

我也對性能感興趣,所以我正在尋找最快的方式來做我的字符串連接。

那我該怎麼辦?有沒有一些狡猾的簡單方法,我在Objective-C中錯過一次說10個字符串連接很多字符串?或者我的想法是使用Python或Ruby類方法返回連接的或正則表達式的修改過的字符串,而不是聽起來那麼令人難以置信的瘋狂?也許我甚至錯過了另一種方式來做到這一點?

更新: 是的。看起來我想拉動另一個語言運行時來執行字符串操作是非常瘋狂的,特別是因爲我注意到我關心速度。添加一個橋可能會比簡單地使用NSString/NSMutableString慢得多。

+1

我覺得使用一個完整的動態語言運行時只是爲了做字符串連接就像是過度反應,不是嗎? 但我敢肯定,你可以找到其他用途.. – fortran 2009-07-07 18:01:08

+0

我認爲,雖然你可以在iPhone上使用C++,但python和ruby由於'沒有解釋語言'規則而被禁止使用 – cobbal 2009-07-07 18:09:54

+0

@fortran - :)當你這樣說我開始認爲我的2AM理念並不好。我明天會醒來,讀這個問題,並且可能爲了甚至首先考慮這個問題而sla myself自己。 – 2009-07-07 18:14:17

回答

9

對於固定大小的拼接,可以使用[NSString stringWithFormat:]像:

NSString *str = [NSString stringWithFormat:@"%@ %@ %@", 
            @"Hello", @"World", @"Yay!"]; 
4

你見過NSMutableString類的appendString方法嗎?同一類

appendFormat會讓你做許多串連的一個說法,如果這是你真正感興趣

+0

喬納森看起來不錯。我對Cocoa比較陌生,所以我錯過了這個方法。仍然對其他人想法如何混合正則表達式和一般字符串操作的其他語言感興趣。 ta – 2009-07-07 18:06:40

9

你可以使用連接操作。

NSArray *chunks = ... get an array, say by splitting it; 
string = [chunks componentsJoinedByString: @" :-) "]; 

會產生類似 接力:-) :-) ACK博克:-) :-) greeble小馬

3

我會避免混合語言,特別是如果你不知道Python或Ruby好。你在Objective-C的可讀代碼中獲得的東西,你將不得不閱讀多種語言來理解你自己的代碼庫。似乎對我來說是一個可維護性的噩夢。

我強烈建議您直接在Objective-C中採取如何做到這一點的建議之一。

2

僅僅爲此拖拽C++似乎相當笨拙。像其他人所說的那樣,在NSString上使用stringWithFormat:或在appendFormat:上使用NSMutableString更自然,不會特別難於閱讀。另外,爲了在Cocoa中使用字符串,你必須添加額外的代碼來從C++字符串中來回轉換。