【问题标题】:Parsing NSMutableString By Number Of Instances按实例数解析 NSMutableString
【发布时间】:2015-02-12 16:17:56
【问题描述】:

我有一个包含大量数据的 NSMutableString。一个简短的例子是:

MP3:名称长度专辑

MP3:名称长度专辑

MP3:名称长度专辑

MP3:名称长度专辑

现在,我想要完成的是解析字符串以仅包含前 3 个 MP3 数据集。所以一旦找到“MP3:”的第四个实例,就停止解析。

我已经尝试了多种方法来实现这一点,但我已经盯着它太久了,开始变得愚蠢。如果它是一个数组,它会很简单,但不幸的是它是一个字符串。有谁知道如何完成这背后的逻辑? 为了更加清晰:我仍然希望第一个 MP3 出现。它们每次都会不同,所以我不能做 subStringToIndex。

【问题讨论】:

    标签: objective-c nsmutablestring


    【解决方案1】:

    要有效地做到这一点,假设输入字符串很长(前三行之后包含数千行),您需要避免使用componentsSeparatedByString:

    相反,通过重复使用rangeOfString: 来查找字符串中的前三个换行符。

    NSString *input = @"MP3: line1\nMP3: line2\nMP3: line3\nMP3: line4\nMP3: line5\n";
    NSUInteger lineStartLocation = 0;
    NSUInteger inputLength = input.length;
    for (int i = 0; i < 3; ++i) {
        NSRange searchRange = NSMakeRange(lineStartLocation, inputLength - lineStartLocation);
        NSRange newlineRange = [input rangeOfString:@"\n" options:0 range:searchRange];
        if (newlineRange.location == NSNotFound) {
            // Not enough lines in input!
            break;
        } else {
            lineStartLocation = newlineRange.location + 1;
        }
    }
    
    NSString *top3 = [input substringToIndex:lineStartLocation];
    NSLog(@"top3 = %@", top3);
    

    【讨论】:

      【解决方案2】:
      NSArray *lines = [data componentsSeparatedByString:@"\n"];
      
      for (NSUInteger i = 0, count = 0; i < lines.count && count < 3; i++) {
          NSString *line = lines[i];
          NSRange range = [line rangeOfString:@"MP3:"];
      
          if (range.location == 0 && range.length == @"MP3:".length) {
              // parsing
              count++;
          }
      }
      

      【讨论】:

        【解决方案3】:
        NSString * stringToParse = @"MP3: hola MP3: pfff MP3: cosas MP3: hello";
        
        NSArray * arrayStringParsed = [stringToParse componentsSeparatedByString:@"MP3:"];
        

        结果是和数组:

        <__nsarraym>( , 你好 , 噗, 科萨斯 你好 )

        第一个元素没有任何内容,但其他 4 个已解析,您可以使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-24
          • 2011-12-30
          • 1970-01-01
          相关资源
          最近更新 更多