如何将NSString分解为具有非显著空格抑制的单词



我有几个格式类似于下面的NSString:

"Hello, how       are   you?"

如何将字符串分解为单词数组?例如,对于上面的句子,我希望有一个由"Hello,", "how", "are", "you?" 组成的数组

通常我会使用函数[NSString componentsSeparatedByCharactersInSet: NSCharacterSet set] 将字符串分解为单词

然而,在这种情况下,这个不起作用,因为单词之间的空格长度不等。注意,我不会知道每个单词的大小以及它们之间的间距。

我怎样才能做到这一点?我正在为OSX而不是iOS开发应用程序。

编辑:我的最终目标是检索句子中的第二个单词。如果有一种更简单的方法可以在不将字符串分解为数组的情况下完成此操作,请随时提出建议。

试试这个:

NSMutableArray *parts = [NSMutableArray arrayWithArray:[str componentsSeparatedByCharactersInSet:[NSCharacterSet  whitespaceCharacterSet]]];
[parts removeObjectIdenticalTo:@""];
NSString *res = [parts objectAtIndex:1]; // The second string

实际上,您可以编写一个循环来遍历字符,并在第一个空白之后找到第一个非空白,然后进一步迭代以找到结尾空白(或行尾)。可能比使用其他方法快5倍(对象分配更少),并且可以在大约10行中完成。

如果您不想使用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"

最新更新