NSString到NSArray

gop*_*pal 11 iphone cocoa cocoa-touch objective-c ios

我想NSString分成一个NSArray.例如,给定:

NSString *myString=@"ABCDEF";
Run Code Online (Sandbox Code Playgroud)

我想要一个NSArray像:

NSArray *myArray={A,B,C,D,E,F};
Run Code Online (Sandbox Code Playgroud)

使用Objective-C和Cocoa如何做到这一点?

Vik*_*ica 24

NSMutableArray *letterArray = [NSMutableArray array];
NSString *letters = @"ABCDEF??";
[letters enumerateSubstringsInRange:NSMakeRange(0, [letters length]) 
                            options:(NSStringEnumerationByComposedCharacterSequences) 
                         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    [letterArray addObject:substring];
}];

for (NSString *i in letterArray){
    NSLog(@"%@",i);
}
Run Code Online (Sandbox Code Playgroud)

结果是

A
B
C
D
E
F

??
Run Code Online (Sandbox Code Playgroud)

enumerateSubstringsInRange:options:usingBlock: 适用于iOS 4+可以枚举具有不同样式的字符串.一个被称为NSStringEnumerationByComposedCharacterSequences,将逐个列举,但对代理对,基本字符加组合标记,Hangul jamo和印度语辅音簇敏感,所有这些都称为组合字符

请注意,接受的答案 "吞下" and breaks ??闯入??.

  • 绝对是正确的方法.我用它做了一个类别:https://gist.github.com/4634479 (2认同)

Fer*_*tes 12

转变

NSString * string = @"A B C D E F";
NSArray * array = [string componentsSeparatedByString:@" "];
//Notice that in this case I separated the objects by a space because that's the way they are separated in the string
Run Code Online (Sandbox Code Playgroud)

记录

NSLog(@"%@", array);
Run Code Online (Sandbox Code Playgroud)

安慰

这是控制台返回的内容


yan*_*kun 11

NSMutableArray *chars = [[NSMutableArray alloc] initWithCapacity:[theString length]];
for (int i=0; i < [theString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%C", [theString characterAtIndex:i]];
    [chars addObject:ichar];
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个天真的解决方案,不处理代理对或组成的字符,正如@JeremyP在他对这个问题的评论中精明地提出的那样.另外,不要忘记在不使用GC或ARC时释放阵列. (5认同)