我一直在寻找将字符串拆分为子字符串的解决方案。我需要一些正确的逻辑,我需要从一些字符开始读取字符串,它应该包含至少17个字符。
e.g。 “43 01 08 43 13 01 18 FD 48 6B D1 43 01 22 02 01 02 02 F1 48 6B D1 43 02 03 03 51 03 52 75 48 6B D1 43 03 53 11 08 15 52 9D 48 6B D1 43 16 14 16 32 00 00“
For Above string,我需要拆分成 “43 01 08 43 13 01 18” “43 01 22 02 01 02 02” “43 02 03 03 51 03 52” “43 03 53 11 08 15 52” “43 16 14 16 32 00 00”
所以On ...我的意思是我需要获得“43”的位置,然后从它的索引我需要读取20个字符(包括空格)并拒绝字符直到下一个“43”出现(BOLD字符为上文提到的)。在此先感谢.. :))
答案 0 :(得分:3)
我只需使用rangeOfString:
找到下一个43,使用substringWithRange:
从那里取20个字符,然后重新开始使用剩余的子字符串(substringFromIndex:
)。
NSString *str = @"43 01 08 43 13 01 18 FD 48 6B D1 43 01 22 02 01 02 02 F1 48 6B D1 43 02 03 03 51 03 52 75 48 6B D1 43 03 53 11 08 15 52 9D 48 6B D1 43 16 14 16 32 00 00";
NSMutableArray *substrings = [NSMutableArray array];
NSRange range = { .length = 20 };
while ((range.location = [str rangeOfString:@"43"].location) != NSNotFound
&& str.length >= range.length + range.location) {
[substrings addObject:[str substringWithRange:range]];
str = [str substringFromIndex:range.location + range.length];
}
答案 1 :(得分:1)
试试这个:
NSMutableArray *output = [[NSMutableArray alloc] init];
NSString *allString = @"43 01 08 43 13 01 18 FD 48 6B D1 43 01 22 02 01 02 02 F1 48 6B D1 43 02 03 03 51 03 52 75 48 6B D1 43 03 53 11 08 15 52 9D 48 6B D1 43 16 14 16 32 00 00";
while (allString.length>0) {
[output addObject:[allString substringToIndex:20]];
allString = [allString substringFromIndex:20];
NSArray *arr = [allString componentsSeparatedByString:@"43"];
if (arr.count>1){
allString =@"43";
for (int i=1;i<arr.count;i++){
allString = [allString stringByAppendingString:[arr objectAtIndex:i]];
}
}else{
allString=@"";
}
}
答案 2 :(得分:1)
假设您的序列始终以“43”开头并且长达7个项目。
拆分字符串并向下走数组创建子数组。
-(NSArray *)splitString:(NSString *)masterString
{
NSArray *values = [masterString componentsSeparatedByString:@" "];
NSMutableArray *outputarray = [@[] mutableCopy];
NSUInteger marker = 0;
NSString *startValue = @"43";
NSUInteger subarraycount = 7;
BOOL foundFlag = YES;
while (foundFlag) {
NSRange checkRange = NSMakeRange(marker, (values.count - marker));
NSUInteger next = [values indexOfObject:startValue inRange:checkRange];
foundFlag = (next != NSNotFound) && ((next + subarraycount) < values.count);
if (foundFlag) {
NSRange subrange = NSMakeRange(next, subarraycount);
NSArray *subarray = [values subarrayWithRange:subrange];
[outputarray addObject:[subarray componentsJoinedByString:@" "]];
marker = next + subarraycount;
}
}
return [outputarray copy];
}