如何在iOS中将字符串分割成以某些字符开头的子字符串

3
我在寻找将字符串拆分成子字符串的解决方案。我需要一个合适的逻辑,从某个字符开始读取字符串,它应该至少包含17个字符。
例如,对于上面的字符串,我需要将其拆分为: "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"
我的意思是需要获取 "43" 的位置,然后从它的索引开始读取20个字符(包括空格),并拒绝直到下一个 "43" 出现的字符(如上所述加粗字符)。谢谢! :)

展示一下你尝试过的内容? - Toseef Khilji
我相信NSScanner是处理这种逻辑的最佳方式。 - San
我正在尝试使用http://pastebin.com/cHpGL1Gr的示例代码,但如果有任何响应在字符串中包含“43”,则它将无法工作!! - iCoder
你说你需要从“43”中读取20个字符,但在你提供的示例中,似乎你只读了10个... - neutrino
@neutrino 空格也是一个字符!! :) - iCoder
@ShrenikShah 好的!我以为每个字符都是用十六进制写的,所以我期望空格是20。请原谅我的愚蠢评论 :-)! - neutrino
3个回答

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
尝试这个:

   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=@"";
       }

    }

1
假设您的序列始终以"43"开头且长度为七个项。
将字符串分割并沿数组向下创建子数组。
-(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];

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接