2013-03-06 82 views
3

有一個簡單的方法來一個的NSString分割成字符數組?如果生成的類型是NSString自身的集合,每個只有一個字符,那實際上是最好的。有沒有簡單的方法將NSString拆分爲字符數組?

是的,我知道我可以在一個循環做到這一點,但我不知道是否有這樣做與任何現有的方法或函數在C#的方式,你可以使用LINQ更快的方法。

例如

// I have this... 
NSString * fooString = @"Hello"; 

// And want this... 
NSArray * fooChars; // <-- Contains the NSStrings, @"H", @"e", @"l", @"l" and @"o" 
+0

這可能不會回答這個問題,但有人中實現的LINQ的方法'NSEnumerator'對象(https://github.com/k06a/NSEnumeratorLinq)。 – bdesham 2013-03-06 17:31:24

回答

11

你可以做這樣的事情(如果你想使用枚舉)

NSString *fooString = @"Hello"; 
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[fooString length]]; 

[fooString enumerateSubstringsInRange:NSMakeRange(0, fooString.length) 
           options:NSStringEnumerationByComposedCharacterSequences 
          usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
    [characters addObject:substring]; 
}]; 

如果你真的想要它在一個NSArray終於

NSArray *fooChars = [NSArray arrayWithArray:characters]; 
+0

謝謝!仍然習慣於塊,這是奇怪的,考慮了我在C#中使用lambda和匿名方法有多舒服! – MarqueIV 2013-03-06 21:38:26

+3

只是一個細節:演員到'的NSArray *'數組不轉換,它只是施放的指針,這是在這種情況下沒有必要。如果你想創建一個不可變數組,你可以使用'arrayWithArray:'方便的方法。 – Monolo 2013-04-10 20:00:47

+1

或者,如果你想要一個快捷方式: '''NSArray * fooChars = characters.copy;''' – mahboudz 2017-07-23 10:06:57

3

請務必關心像表情符號和其他字符的某些字符可能會跨越一個索引的長度範圍。

下面是NSString的

一類方法
@implementation (SplitString) 

- (NSArray *)splitString 
{ 
    NSUInteger index = 0; 
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:self.length]; 

    while (index < self.length) { 
     NSRange range = [self rangeOfComposedCharacterSequenceAtIndex:index]; 
     NSString *substring = [self substringWithRange:range]; 
     [array addObject:substring]; 
     index = range.location + range.length; 
    } 

    return array; 
} 

@end 
+0

區域指標沒有加入爲標誌 – 2014-06-03 18:47:30

0

將其轉換爲NSData[data bytes]將在編碼中有一個C字符串,你選擇[data length]字節長。

+0

不,這不會給你一個字符數組。它給你一個字節數組,表示將字符串轉換爲數據時使用的任何字符編碼。並非完全相同的要求。 – rmaddy 2017-12-20 17:37:32

相關問題