3

以下のような形式のNSStringがいくつかあります。

"Hello, how       are   you?"

文字列を単語の配列に分割するにはどうすればよいですか?たとえば、上記の文の場合、次のような配列が必要です。"Hello,", "how", "are", "you?"

通常、私は関数を使用して文字列を単語に分割します[NSString componentsSeparatedByCharactersInSet: NSCharacterSet set]

ただし、単語間のスペースの長さが等しくないため、この状況では機能しません。注意私は各単語のサイズとそれらの間のスペースを知りません。

どうすればこれを達成できますか?iOSではなくOSX用のアプリに取り組んでいます。

編集:私の最終的な目標は、文の2番目の単語を取得することです。文字列を配列に分割せずにこれを行う簡単な方法がある場合は、遠慮なく提案してください。

4

3 に答える 3

5

これを試して:

NSMutableArray *parts = [NSMutableArray arrayWithArray:[str componentsSeparatedByCharactersInSet:[NSCharacterSet  whitespaceCharacterSet]]];
[parts removeObjectIdenticalTo:@""];
NSString *res = [parts objectAtIndex:1]; // The second string
于 2012-09-05T21:05:32.073 に答える
1

実際には、ループを記述して文字を反復処理し、最初の空白の後に最初の非空白を見つけてから、さらに反復して終了空白(または行末)を見つけることができます。おそらく、他の方法の1つを使用するよりも約5倍高速であり(オブジェクトの割り当てがはるかに少ない)、約10行で実行できます。

于 2012-09-05T21:23:57.020 に答える
1

CharacterSetを使用したくない場合は、これを試して余分なスペースを削除してください。

NSString* string = @"word1, word2          word3                        word4";
bool done = false;
do {
    NSString tempStr = [string stringByReplacingOccurrencesOfString:@"  " withString:@" "];
    done = [string isEqualToString:tempStr];
    string = tempStr;
} while (!done);
NSLog(@"%@", string);

これにより、「word1、word2、word3、word4」が出力されます。

于 2012-09-05T21:26:02.103 に答える