あなたがしたいすべてが検討し、文字列からストリップスペースの場合:
_foo2 = [foo stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// or whitespaceAndNewlineCharacterSet, if that fits your use case better
もう少し具体的にしたい場合は、あります:
_foo2 = [foo stringByReplacingOccurrencesOfString:@" " withString:@""];
以上にあなたがやっていることのセマンティクスに一層密接に従ってください:
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
_foo2 = [fooArray componentsJoinedByString:@""];
そして、あなたは本当に(おそらく各単語のいくつかの処理を行うには?)それをループにしたい何らかの理由で、それを行うにはいくつかの方法がある場合:
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
_foo2 = [NSMutableString string];
for (int i = 0; i < fooArray.count; i++) {
[_foo2 appendString:[fooArray objectAtIndex:i]];
}
または:
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
_foo2 = @""; // equivalent to [NSString string]
for (int i = 0; i < fooArray.count; i++) {
_foo2 = [_foo2 stringByAppendingString:[fooArray objectAtIndex:i]];
}
(それは高速列挙も考慮していません。別名for..in
です)同じNSMutableStringに繰り返し追加することは、新しい文字列を作成するよりも安価で、古いものを投げるよりも、最初のループが効率的です。
ここでNSMutableStringを使用すると、余計なことがあります: 'stringbyAppendingString:'は受信者の内容に引数を付加した新しい文字列を作成します。受信者が変更可能かどうかは関係ありません。さらに、 'alloc'を使って作成すると、ループの最初の繰り返しで漏れてしまうことになります(ARCを使用していない限り、これは想定できません)。そして、すべてのことの上に、ニールスが達成しようとしているものに応じて、必ずしもループが必要なわけではありません。コメントで詳しく説明するにはあまりにも多くのことがあります。完全な話の私の答えを見てください。 – rickster
新しい質問を詳細に掲載しました。うまくいけば分かりやすいでしょう:)新しい質問は次の通りです。xcodeのtxtドキュメントの構文解析ツール –