2012-09-05 51 views
3

我有幾個NSString的一個格式類似於下面的一個:如何將NSString分解爲非顯着空白抑制的單詞?

"Hello, how  are you?" 

我怎樣才能打破串入詞的數組?例如,對於上面這句話我期望的陣列,其中包括"Hello,", "how", "are", "you?"

通常我會通過使用功能[NSString componentsSeparatedByCharactersInSet: NSCharacterSet set]

打破串入的話然而,這會在這種情況下,因爲空間不是工作字之間的長度不等。注意我不會意識到每個單詞的大小和它們之間的空間。

我該如何做到這一點?我正在爲OSX而不是iOS應用程序工作。

編輯:我最終的目標是檢索單詞的句子。如果有更簡單的方法可以做到這一點,而不會將字符串分解爲數組,請隨時提出建議。

+0

可能的[在Objective-C的NSString記號化]重複(http://stackoverflow.com/questions/259956/nsstring-tokenize-in-objective-c) – SirDarius

+0

@SirDarius - 這似乎不是重複的,因爲大多數答案建議使用componentsSeparatedByString/CharactersInSet 。 –

+0

令牌化是將文本流分解成單詞,短語,符號或稱爲令牌的其他有意義元素的過程。這裏的問題等同於詢問如何標記NSString。 – SirDarius

回答

5

試試這個:

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

我無法使用'[parts removeObjectIdenticalTo:@「」];'但是當我用'[words removeObject:@「」]替換它時,我們無法按預期工作。 – mah

1

嗯,你其實可以寫一個循環之後的第一個空白通過人物進行迭代,找到第一個非空,然後再重複,以找到結束空白(或結束線)。與使用其他方法之一相比,速度可能快大約5倍(對象分配少得多),並且可以在大約10行內完成。

1

如果你不想使用一個字符集,試試這個刪除多餘的空格:

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); 

這將輸出「字詞1,單詞2 WORD3 word4」

相關問題