3

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

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

例如

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

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

4 回答 4

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];
于 2013-03-06T17:39:05.110 回答
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
于 2013-03-06T17:32:54.060 回答
0

将其转换为NSData将在您选择字节长[data bytes]的编码中具有 C 字符串。[data length]

于 2013-03-06T17:47:48.467 回答
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];
}
于 2018-07-05T07:51:39.123 回答