有没有一种简单的方法将NSString拆分成一个字符数组?

时间:2013-03-06 17:28:20

标签: objective-c nsstring nsarray

有没有一种简单的方法将NSString拆分成一个字符数组?如果结果类型是NSString本身的集合,每个只有一个字符,那实际上是最好的。

是的,我知道我可以循环执行此操作,但我想知道是否有更快的方法可以使用任何现有方法或函数以C#中的LINQ方式执行此操作。

e.g。

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

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

4 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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

答案 2 :(得分:0)

将其转换为NSData[data bytes]将在您选择[data length]个字节的编码中包含一个C字符串。

答案 3 :(得分:0)

尝试一下

NSMutableArray *array = [NSMutableArray array];
NSString *str = @"Hello";
for (int i = 0; i < [str length]; i++) {
    NSString *ch = [str substringWithRange:NSMakeRange(i, 1)];
    [array addObject:ch];
}