1

我想分成NSString具有固定长度部分的数组。我怎样才能做到这一点?

我搜索了一下,但我只找到了 componentSeparatedByString 方法,仅此而已。它也可以手动完成,但是有更快的方法吗?

4

3 回答 3

6

取决于您所说的“更快”是什么意思 - 如果您指的是处理器性能,我猜它很难被击败substringWithRange:,但是对于像这样的问题的健壮、简单的编码,正则表达式实际上可以派上用场。

这是一个可用于将字符串分成 10 个字符的块,允许最后一个块少于 10 个字符:

NSString *pattern = @".{1,10}";

不幸的是,正则表达式机制的 Cocoa 实现不太优雅,但使用起来足够简单:

NSString *string = @"I want to split NSString into array with fixed-length parts. How can i do this?";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: pattern options: 0 error: &error];

NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];

NSMutableArray *result = [NSMutableArray array];                            
for (NSTextCheckingResult *match in matches) {
    [result addObject: [string substringWithRange: match.range]];
}
于 2013-09-13T21:31:22.840 回答
0

将字符串分解为一系列 NSRange,然后尝试使用 NSString 的substringWithRange:方法。

于 2013-09-13T21:22:51.110 回答
0

您可以用不同的方式拆分字符串。一种方法是按空格(或任何字符)分割:

NSString *string = @"Hello World Obj C is Awesome";

NSArray *words = [string componentsSeparatedByString:@" "];

您还可以在字符串中的确切点拆分:

NSString *word = [string substringWithRange:NSMakeRange(startPoint, FIXED_LENGTH)];

只需将它放在一个固定长度的循环中并保存到可变数组:

NSMutableArray *words = [NSMutableArray array];
for (int i = 0; i < [string length]; i++) {
    NSString *word = [string substringWithRange:NSMakeRange(i, FIXED_LENGTH)]; //you may want to make #define
    [array addObject:word];
}

希望这可以帮助。

于 2013-09-13T21:42:26.333 回答