我想解析一个字符串来替换一些元素。
如果我的字符串包含 <ol>
然后我想解析 <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;
}
但是我怎样才能用当前的循环计数替换
最佳答案
这样做
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 中有一个字符串,可以用来替换你的字符串
可以对其他标签重复相同的方法
关于html - 如何在 Objective-C 中解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360091/