0

いくつかの要素を置き換えるために文字列を解析したいと思います。
文字列に<ol>thenが含まれている場合は、<li>要素を解析して数値に置き換えたいと思います。

rangeOfString含まれている文字列を 確認できることを知っています。

if ([myString rangeOfString:@"<ol>"].location != NSNotFound) {
    //Do stuff here  
}

<ol></ol>要素の間だけを解析するにはどうすればよいですか?

編集1:これが私の解決策です

- (NSString *)parseOrderedList:(NSString *)str {


NSMutableString *html = [NSMutableString stringWithCapacity:[str length]];

NSScanner *scanner = [NSScanner scannerWithString:str];
NSString *tempText = nil;

while (![scanner isAtEnd])
{
    [scanner scanUpToString:@"<ol>" intoString:&tempText];
    [scanner scanUpToString:@"</ol>" intoString:&tempText];


    if (tempText != nil) {
        [html appendString:tempText];
        html = [[[html stringByReplacingOccurrencesOfString:@"</li>" withString:@" "] mutableCopy] autorelease];

            while ([html rangeOfString:@"<li>"].location != NSNotFound) {
                html = [[[html stringByReplacingOccurrencesOfString:@"<li>" withString:[NSString stringWithFormat:@"%i.", i]] mutableCopy] autorelease];
                i++;
            }

    }


    if (![scanner isAtEnd])
        [scanner setScanLocation:[scanner scanLocation] + 0];

    tempText = @" ";

}

return html;
}  

しかし、どうすれば交換できますか

  • ループの現在のカウントで?私は毎回最初のカウントを取得しています。

  • 4

    1 に答える 1

    1

    これを行う

    NSString * aString = @"your string";
    NSMutableArray *substrings = [NSMutableArray alloc]init];
    NSScanner *scanner = [NSScanner scannerWithString:aString];
    [scanner scanUpToString:@"<ol>" intoString:nil]; // Scan all characters before <ol>
    while(![scanner isAtEnd]) 
    {
      NSString *substring = nil;
      [scanner scanString:@"<ol>" intoString:nil]; // Scan the <ol> character
      if([scanner scanUpToString:@"</ol>" intoString:&substring]) 
      {
      // If the space immediately followed the <ol>, this will be skipped
      [substrings addObject:substring];
      }
     [scanner scanUpToString:@"<ol>" intoString:nil]; // Scan all characters before next <ol>
    }
    

    nsmutablearrayに文字列があり、これを使用して文字列に置き換えることができます

    他のタグについても同じ方法を繰り返すことができます

    于 2012-07-06T10:16:57.740 に答える