2009-07-07 26 views
1

現在、私はiPhone 3.0 SDKを使用してObjective-Cで現在100%書かれているソフトウェアを開発中です。Objective-C文字列操作

Objective-Cの文字列連結:

は、私はかなりまたは文字列連結、より具体的には、NSStringの連結及びこれまでのところ、私はこのようにそれをやっているを実行する必要があり、クロス道路になってきました。

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

今、あなたが想像できるよう、これは私が一緒に6 NSStringsを連結しようとすると、読み取ることが非常に困難なります。

最初に私は私の文字列の連結を行い、として、私は次のようにC++の簡単な文字列の連結を使用することができます戻って私のObjective-Cのクラスにそれを渡すのObjective-C++クラスで混合意図:

C++文字列連結:

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

私はC char配列を使用することができますが、それはもう少し読みにくいだろう。

それから、私はCocoaでPythonまたはRubyブリッジを使うことができました。これは、C言語よりも正規表現と優れた文字列処理の追加ボーナスを提供します。

これは、RubyとPythonを少量しかコーディングしていないにもかかわらず、文字列操作言語として請求されているため、これは私には意味がありました。 Perl私はXcodeで直接サポートされていないので、スキップすることにしました。

私もパフォーマンスに興味がありますので、私は文字列連結を行うための最速の方法を探しています。

どうすればよいですか?一度に多くの文字列を連結するためにObjective-Cに欠けているいくつかの簡単な方法がありますか? PythonやRubyクラスのメソッドを使用して、連結された文字列や正規表現の変更された文字列を返すという考えは信じられないほど狂ったものではないでしょうか?おそらく私はこれを行うには別の方法が欠けていた?

更新: はい。私はスピードに関心があると指摘して以来、私は文字列の操作を行うために別の言語ランタイムを引き出すことを考えるのはむしろ夢中でした。ブリッジを追加すると、NSString/NSMutableStringを単に使うよりもずっと遅くなるでしょう。

+1

私は文字列連結を行うために、動的言語ランタイム全体を使用するように感じていますが、それは過剰反応のようなものでしょうか? しかし、私はあなたが他の用途を見つけることができると確信しています.. – fortran

+0

iPhoneでC++を使うことができますが、PythonとRubyは '解釈されない言語'のルールのため制限されていません – cobbal

+0

@fortran - :)あなたはそれを私が2AMのアイデアがそれほど大きくないと思うようにしています。私は明日目を覚ますだろう、この質問を読んで、おそらくこれを最初に考えても自分自身を叩く。 –

答えて

9

固定サイズの連結のために、あなたは次のように[NSString stringWithFormat:]を使用することができます。

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

ジョナサンが答えに一番の票を得た理由は分かりません。コンパイルすることができず、コロンがありません。これは簡単で分かりやすく、私はこれに固執すると思います。 –

+0

「HelloWorldseeeasy!」を返すコードを最初に尋ねたので、これはあまり正確ではないようです。ジョナサンがするスペースは...-) –

+0

プログラマーは、ちょうど正しいと思われるテクニカルを見つけることができません:P –

4

あなたはNSMutableStringクラスのappendStringメソッドを見たことがありますか?それはあなたが本当に興味を持っているものであれば、同じクラスから

appendFormatを使用すると、1つのステートメントで多くの連結を行うようになる

+0

それは良いジョナサンに見えます。私はココアには比較的新しいので、私はこの方法を逃した。正規表現と一般的な文字列操作のために他の言語を混在させることについて他の人が考えるものにはまだ興味があります。 ta –

+1

NSMutableStringを使用すると、たくさん連結しても悪い考えではありませんが、appendFormat:は何も返さないので、コード例は実際には動作しません。 – Chuck

+0

Xcodeでビルドすると、NSStringが-appendFormatに応答しないことがあるという警告が表示されます。私はあなたも 'appendFormat'の後にコロンがないことに気付きました。 –

9

あなたは結合操作を使用することができます。

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

は、私はあなたがよくPythonやRubyのを知っていない場合は特に、言語を混合避けるだろうgreeble :-)ポニー

+1

+1私は良いアイデアを – teabot

+0

知っている。私は不思議ですが、あなたは価値があると書かなければならない余分なコードです。 –

3

:-) :-) BORK ACK :-) OOPのようなものを生成します。 Objective-Cで読めるコードで得られるものは、自分のコードベースを理解するために複数の言語を読む必要があります。保守性の悪夢のように思える。

Objective-Cでこれを行う方法の提案の1つを強くお勧めします。

+0

それは良い点です。私はこのアイデアが2時に朝起きたときに考えなかったのです。 –

2

C++でのドラッグは、このためにはかなり重いようです。 NSStringでstringWithFormat:を使用するか、NSMutableStringでappendFormat:を使用すると、他の人が示唆しているように、はるかに自然で、特に読みにくくはありません。また、Cocoaで文字列を使用するには、C++の文字列を前後に変換するために余分なコードを追加する必要があります。