我有一个包含7个TAB分隔字符串的.txt文件。我想取7个字符串,一次一个,并将每个字符串分隔符分隔成一个数组,然后将该数组放入一个Mutable数组中,从那里我可以处理每个7个处理过的字符串。这是我的代码:
NSMutableArray *arrayOfSplitStrings = [NSMutableArray arrayWithCapacity:0];
for(int i = 1; i <= inputStrings.count - 1; i++) {
NSArray *oneSplitString = [[NSArray alloc]init];
arrayOfSplitStrings = [[NSMutableArray alloc]init];
oneSplitString = [inputStrings[i] componentsSeparatedByString:@"\t"];
[arrayOfSplitStrings addObjectsFromArray: oneSplitString];
}
问题是,完成后, arrayOfSplitStrings 只有一(1)个数组,它是@&#34;&#34;!我已经看了SO并尝试了我能想到的一切,但它仍然无法正常工作。我做错了什么?
答案 0 :(得分:3)
这一行导致输出数组被重新创建,循环的每次迭代,因此它只保留文件的最后一行:
arrayOfSplitStrings = [[NSMutableArray alloc]init];
尝试:
NSMutableArray *arrayOfSplitStrings = [NSMutableArray new];
for (NSUInteger i = 1; i < [inputStrings count]; i++) {
NSArray *oneSplitString = [[inputStrings[i] componentsSeparatedByString:@"\t"] copy];
[arrayOfSplitStrings addObject:oneSplitString];
}
(注意for
循环条件也会改变。)
答案 1 :(得分:0)
循环外的arrayOfSplitStrings
被循环内部创建的NSArray
隐藏,将其删除。
无需创建NSArray
arrayOfSplitStrings
,因为在下一行返回一个新数组时,只需要声明。
for循环可以更改为for-in循环,从而消除索引变量i
。
还有其他一些可能的优化。
NSArray *bodyStrings = [inputStrings subarrayWithRange:NSMakeRange(1, inputStrings.count-1)];
NSMutableArray *arrayOfSplitStrings = [NSMutableArray new];
for (NSString *aString in bodyStrings) {
NSArray *oneSplitString = [aString componentsSeparatedByString:@"\t"];
[arrayOfSplitStrings addObject:oneSplitString];
}
输入:
NSArray *inputStrings = @[@"qw\ter", @"as\tdf", @"zx\tcv"];
产生
arrayOfSplitStrings: (
(
as,
df
),
(
zx,
cv
)
)